php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.11.2011, 22:23  
Neuer Benutzer
 
Registriert seit: 07.05.2011
Beiträge: 6
PHP-Kenntnisse:
Anfänger
Justin befindet sich auf einem aufstrebenden Ast
Standard Textfile einlesen, prüfen, ausgeben

Hallo zusammen

Ich hab ein Weilchen nach einer passender Lösung gesucht, finde aber immer nur Fragmente der Lösung und ich hätte gerne eine passende Lösung ohne grosse Umwege weshalb ich mich mal hier erkundigen möchte.

Ich habe ein Textfile dass täglich um mehrere tausend Zeilen erweitert wird.
Ich möchte dieses Textfile einlesen und anschliessend in einem passenden Format wieder ausgeben, damit ich anschliessend dies per Autoimport via SQL in die Datenbank laden kann.

Damit nicht täglich alle tausende Zeilen neu geschrieben werden müssen, möchte ich prüfen ab wo die neuen Datensätze sind und dann nur diese erweitern. Damit muss die Datenbank täglich nur einige tausend Zeilen einlesen statt immer alles.

Wie gehe ich da am besten vor?

Ich danke bereits jetzt für eure Hilfestellung

Gruss

Justin
Justin ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.11.2011, 22:35  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Setz den Zeilen einfach einen Timestamp oder reguläres Datum vorweg udn prüf darauf!
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 23.11.2011, 23:41  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 109
PHP-Kenntnisse:
Anfänger
Dreamwatcher befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

mir fallen jetzt mehrere Wege ein.

Weg1: Sende alles an deine Datenbank (mit file hast du ja bereits ein array) mit INSERT IF NOT EXISTS

Weg2: Jedesmal wenn du die Daten geschrieben hast, legst du dir davon eine Kopie an. Kommen neue Daten dazu, dann liest du beide Dateien (wieder mit file) ein und benutzt danach array_diff um die differenz zu bekommen.
Dann nur noch ab in die DB damit

Weg3: Warum behälst du die alten Daten in deiner Textfile? Oder ist es gar nicht deine?

Die Wege sind natürlich nur möglich, wenn pro Zeile ein Datensatz vorhanden ist. Hast ja nicht geschrieben wie die Datei genau aussieht und noch weiter will ich meine Hellseher-Fähigkeiten nicht strapazieren...
Dreamwatcher ist offline   Mit Zitat antworten
Alt 23.11.2011, 23:45  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Eine Log-Rotation wäre denkbar, dann hast du alle Daten aus einem bestimmten Zeitraum in einer Datei (Stunde oder Tag). Das letzt Log dann zu Beginn des nächsten Zeitraumes von einem Cron-Job verarbeiten lassen.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 24.11.2011, 00:36  
Neuer Benutzer
 
Registriert seit: 07.05.2011
Beiträge: 6
PHP-Kenntnisse:
Anfänger
Justin befindet sich auf einem aufstrebenden Ast
Standard

danke für die bereits vielen antworten

gibt mir neue denkansätze. das file ist leider nicht von mir sondern bekomme ich so von dhl

ich denke der weg2 von dreamcatcher mit dem diff trifft am besten zu ohne grosse umwege zu machen. und ja, pro zeile ist ein datensatz.
ich werde es mal mit dieser variante versuchen, sollte ich kläglich scheitern werde ich nochmals um euren rat bitten

danke und gruss

justin
Justin ist offline   Mit Zitat antworten
Alt 24.11.2011, 08:59  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Justin
Ich habe ein Textfile dass täglich um mehrere tausend Zeilen erweitert wird.
Zitat:
Zitat von Dreamwatcher
Weg2: Jedesmal wenn du die Daten geschrieben hast, legst du dir davon eine Kopie an. Kommen neue Daten dazu, dann liest du beide Dateien (wieder mit file) ein und benutzt danach array_diff um die differenz zu bekommen.
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 24.11.2011, 10:10  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Zitat von Arne Drews Beitrag anzeigen
Setz den Zeilen einfach einen Timestamp oder reguläres Datum vorweg udn prüf darauf!
Die Anpassung ist gar nicht nötig, speicher einfach irgendwo die zuletzt eingefügte Zeilennummer. Beim nächsten Auslesen überspringst du die Zeilen bis dahin dann:

PHP-Code:
$handle fopen(...);
$lastInsert hole_zuletzt_eingefuegte_zeilennummer();

// Alte Zeilen überspringen
for ($i 0$i $lastInsert; ++$i) {
  
fgets($handle);
}

// Neue Zeilen einlesen
$rows = array();
while (
$row fgetcsv($handle, ...)) { // ist doch CSV oder?
  
$rows[] = $row;
  ++
$lastInsert;
}
speichere_zuletzt_eingefuegte_zeilennummer($lastInsert);
$result konvertiere_array_zu_sql($rows); 
fab ist offline   Mit Zitat antworten
Alt 24.11.2011, 10:24  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Stimmt!

Aber wenn die letzte Zeilennummer gespeichert ist, kann man das auch einfacher handeln:
PHP-Code:
$lastInsert getLastRowNumber();
$newRows array_slicefile('./file-with-lines.txt'), $lastInsert );

foreach( 
$newRows as $row ) {
  
// transfer to db
}

saveLastRowNumber$lastInsert count($newRows) ); 
Beitrag editiert:
Bei der Menge an Zeilen ist das allerdings nicht performant, da muß ich fab Recht geben!
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein

Geändert von Arne Drews (24.11.2011 um 10:36 Uhr). Grund: siehe fabs Post #9
Arne Drews ist offline   Mit Zitat antworten
Alt 24.11.2011, 10:26  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Du hast doch selber schon darauf hingewiesen: Bei einer Datei in der jeden Tag 1000 Zeilen hinzukommen sollte man sich dreimal überlegen, sie vollständig in den Speicher zu laden wenn es nicht notwendig ist.
fab ist offline   Mit Zitat antworten
Alt 24.11.2011, 10:36  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Hast recht, siehe Edit...
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Auf Inhalt Prüfen und ausgeben PC-Hilfe Meyer PHP Einsteiger 14 31.07.2011 17:21
[Erledigt] Backlinks prüfen, fopen, externe URL einlesen Phoenix@ PHP Tipps 2010 5 14.11.2010 17:44
Einlesen und Ausgeben Row PHP Tipps 2010 59 19.10.2010 11:17
ausgeben von mehreren tabellen mysql SpecialFighter PHP Tipps 2009 9 15.10.2009 18:41
[Erledigt] CSV einlesen, Daten abgleichen und Werte ausgeben mastertnt PHP Tipps 2009 21 21.07.2009 16:12
CSV per PHP einlesen und als Tabelle ausgeben pelowi PHP-Fortgeschrittene 1 30.03.2009 15:19
Bild erzeugen lassen und in Tabelle ausgeben maximus PHP Tipps 2008 7 11.11.2008 20:53
Daten aus php Datei einlesen und ausgeben Pearl PHP Tipps 2008 13 28.08.2008 17:34
verschachtelte Rubriken ausgeben / alle anzeigen prinzli PHP Tipps 2008 3 25.02.2008 22:37
URL abfragen und prüfen! plongo_291 PHP Tipps 2006 4 19.10.2006 19:21
Datei einlesen - ausgeben + php code ausführen NetLook PHP Tipps 2006 7 18.10.2006 15:17
checkfelder in mysql einlesen u wieder ausgeben PHP Tipps 2005-2 3 06.06.2005 14:36
[Erledigt] Ganze Tabelle ausgeben PHP Tipps 2004-2 1 21.11.2004 16:48
[Erledigt] Alle Schriften einlesen und im Auswahlmenü ausgeben PHP Tipps 2004 12 29.07.2004 16:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php logfile zeilen überspringen, php daten einlesen zeile überspringen, \textfile einlesen \, php array_diff begrenzt

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:26 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum