Datei in Variable speichern

QUOTE (Friedrich @ Mo 26.9.2005, 14:10)[...]
Interessant, was ich jetzt herausgefunden habe: Das Abarbeiten einer riesigen Datei hat rund 2 Minuten gedauert, was ja eingentlich nicht gehen dürfte, wenn der Abbruch bereits nach 30 Sekunden Ausführungszeit gestartet wird.
[...]

Reine Bearbeitungszeit ohne die Upload-Zeit oder zusammen mit der Upload-Zeit?
- Das gilt hier auch mit zu beachten.



Nebenbei ersetzt mal den Quatsch:

QUOTE $text=file_get_contents("$datei");
$text=str_replace("\r","\n",$text);

$zeilenanzahl=substr_count($text,"\n");
$textneu=explode("\n", $text);


mit:

CODE $textneu = file($datei);
$zeilenanzahl = count($textneu);


Besonders weil dein Code beim zählen der Zeilenanzahl auch Fehler unterläufen können, je nachdem welche Ende die einzelnen Zeilen haben.
Bei dir passiert ungefährt das, wenn 4 Zeilencode geschreiben sind (einige mögliche Varianten):
  1. \r\n wird ersetzt zu \n\n und ergibt $zeilenzahl = 6;
  2. \n wird nicht ersetzt und bleibt \n und ergibt $zeilenzahl = 3;
  3. (mit Leerzeile am Ende der Datei) \r\n wird ersetzt zu \n\n und ergibt $zeilenzahl = 8;
  4. (mit Leerzeile am Ende der Datei) \n wird nicht ersetzt und bleibt \n und ergibt $zeilenzahl = 4;


MfG Sascha Ahlers
 
Hallo,

ohne Upload-Zeit, also nur die Abarbeitung aller Zeilen.

Woher möchte er denn bei dem count wissen, was er zählen soll? Ich muss ihm doch erst einmal sagen, dass jede Zeile ein Element einer Variable ist. Und das kann ich nun mal nur mit den Zeilenumbrüchen.
Meiner Meinung nach werden keine Fehler aufkommen, ist bisher auch nicht passiert. Ich wandel doch nur im ersten Schritt alle \r um in \n, mehr nicht. Und später werden alle \n gezählt.

Friedrich
 
QUOTE (Friedrich @ Mo 26.9.2005, 17:47)[...]
Meiner Meinung nach werden keine Fehler aufkommen, ist bisher auch nicht passiert. Ich wandel doch nur im ersten Schritt alle \r um in \n, mehr nicht. Und später werden alle \n gezählt.
[...]

Die erste Annahme von Dir ist einfach falsch, denn für jedes Teil-Problem innerhalb der Programmierung gibt es meistens mehrere Lösung, einige sind halt nur umständlicher als andere oder Fehleranfälliger. Nur dadurch können ja auch Programme entsprechend gut oder schlecht geschrieben sein.

Windows macht ein Zeilenende mit \r\n, was Du so mit \n\n ersetzt, so zählt er jeden Zeilenumbruch zwei Mal, was bei einer hochgeladenen Dateien passieren kann. Linux macht jedoch nur ein \n, wodurch jede Zeileumbruch ein Mal gezählt wird.
Hierbei wird aber selbst mit dem Linux-Zeilenumbruch nur jeder Zeilenumbruch gezählt und nicht jede vorhandene Zeile!
Die Beispiele siehst du im Beitrag davor.


Tut mir leid, aber Dir nun noch erklären zu müssen was file und count machen, ist mir nun doch etwas zu blöde, besonders da ich die Funktion file etwas weiter oben schon mal aufgezählt habe, außerdem kann alles auf der www.php.net Seite nachgeschlagen werden.
Also selber lesen und verstehen:


QUOTE ohne Upload-Zeit, also nur die Abarbeitung aller Zeilen.

Dann müsste die maximale Ausführungszeit höher sein, einfach mal mit phpinfo() schauen, auf welchen Wert diese gesetzt ist.



MfG Sascha Ahlers
 
Wäre das Script eine Frau, würde ich nicht in Deiner Haut stecken wollen. Sei mir nicht böse, ich hab zu meinen PHP-Anfängen auch viel autodidaktisch gearbeitet, und hab sicher noch einige hässlichere Sachen gebastelt, aber das Script ist einfach die Härte. In einer Programmiererkarriere gibt es immer wieder Punkte an denen man sich wieder ein wenig dem Studium widmen sollte.

Beschreibe bitte auch den Fehler und die Ausgabe besser. Soweit ich das verstehe willst Du von Gedcom.txt in mysql. Das Script parsed macht den echo für Zeile 1 bis Zeile i und hält dann 5min, um dann ohne Fehler abzubrechen? Korrekt? i ist variabel (bitte um Beispiel für i)?

Wenn i variabel ist, spricht das dagegen, dass eine bestimmte Zeile Deinen "Parser" überfordert. Welche Fehler gibt Dein PHP-Installation aus?

Hmm. Ich muss leider zugeben, ich tue mir sehr schwer in Deinen Zeilen nach Fehler zu suchen, aber das Textfile sieht nach old school text only aus. Wir haben mittlerweile XML et al, also könnte es wirklich alt sein. Wenn etwas alt ist, dann gibt's es schon lange. Da es ausserdem weit verbreitet scheint, liegt es auf der Hand, das es evtl. schon etwas gibt. -> http://pear.php.net/package/Genealogy_Gedc...ogy_Gedcom.html Schimpft mich faul, aber ich goog'le immer, wenn ich nur die kleinste Hoffnung habe...

Nun ja, soviel zu meinen bisherigen Tipps, neue Tipps:
1. Downloaden
2. Benutzen von Parser um in mysql einzuspeisen
3. Angucken der Klassen um etwas PHP zu lernen...

Da die Personen untereinander stehen, wäre es m.E. eher sinnvoll diese einzeln einzulesen. Guck fopen, file handler etc... auf php.net. Dann drückst Du nicht die ganze Suppe in die RAM, sondern die aktuelle Person und den file pointer... Aber egal, PEAR ist cool.

PS: Ich bin schon so weit, dass ich Tipp ohne mit der Wimper zu zucken mit 2 p schreibe....
Und wegen des letzen Details, glaub bitte Sascha. Irgendjemand hat mir mal erklärt, wieso der Unterschied herrscht. Ich habs vergessen, aber es hatte mit ner Schreibmschine zu tun ;-) Ach ja und schau mal http://php.net/switch Ja genau, Windows meint es müsse zuerst den Kopf an den Anfang der Zeile tun und dann die neue Zeile anfangen. Und beherzige auch Bulls Vorschlag, siehe auch hier.
 
Zurück
Oben