Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 16-03-2013, 17:11
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Nun habe ich da noch einmal einiges getestet. Zwei Problem, wobei das eine Problem eventuell vernachlässigt werden könnte, wenn es sich um keine Mammutdateien handelt. fgetcsv ist wesentlich langsamer als fgets.

Beispiel 1:
PHP-Code:
$f=fopen("test4.csv","r");

while ((
$line fgets($f4096)) !== false) {

    
$line_arr[]=$line;
}
fclose($f);

// Laufzeit: 0.1 
Beispiel 2:
PHP-Code:
$f=fopen("test4.csv","r");

while ((
$line fgetcsv($f4096";")) !== false) {

    
$line_arr[]=$line;
}
fclose($f);

// Laufzeit: 5.9 Sekunden 
Die erste Variante, die von Guenni61, im Zusammenspiel mit str_getcsv war eigentlich verhältnismäßig schnell.

PHP-Code:
$iz count($line_arr);

for (
$i $iz -1$i >= 49980$i--){

     
$felder str_getcsv($line_arr[$i], ";");
     
     
print_r($felder);

Nur wenn es sich um eine Mammutdatei handelt, versagt die, da ja alles mit $line_arr[]=$line; in einem Array gespeichert wird und dann nur diese Fehlermitteilung ausgegeben wird:

Fatal error: Allowed memory size of 134217728 bytes exhausted

Bei den von mir verwendeten Testdateien funktionierte es bei der mit 50.000 Zeilen noch problemlos, bei der mit 200.000 Zeilen kam die Meldung.

@ andygyr

Je nachdem, wie viele Felder und Daten Deine Dateien enthalten, müsstest Du mal ausprobieren, ob Du mit einer Überschreitung des Limits rechnen musst oder auch nicht. Falls ja, habe zwischenzeitlich mit einem kleinen Tutorial begonnen:

OOP: Klasse zum Auslesen (rückwärts) von umfangreichen CSV-Dateien | Coder-Welten.de

Enthält dann auch eine Blätterfunktion usw..
Mit Zitat antworten