Andreas Korthaus: Wie funktionieren fopen() und fgets() intern?

Beitrag lesen

Halllo!

Ich schreibe gerade ein Script, welches eigentlich nur die 2. und 3. Zeile aus Datendateien mit 10.000 und mehr Zeilen braucht, und das von über 100 Dateien und die einzelnen Dateien haben oft über 1 MB.

Sind also z.B. 200MB, von denen mich aber nur weniger als 100 KB interessieren.
Wie programmiere ich das jetzt möglichst effektiv? Daher interessiert mich mal der Background, wie die Funktionen fopen und fget implementiert sind. Leider verstehe ich selbst den C Quelltext nicht wirklich, da blicke ich einfach nicht durch, aber vielleicht weiß da ja hier jemqand was zu, da ich auch annemhme das das in verschiedenen Programmiersprachen ähnlich implementiert ist.

Bisher habe ich das einlesen aus Faulheit meistens mit file() gemacht, aber das ist wohl denkbar schlecht in diesem Fall, da so alles eingelesen, und in eiien Array geschreben wird, das brauche ich gar nicht.

Ich vermute das fopen nichts mit der Dateigröße zu tun hat, da es nur einen Zeiger auf die Datei zurückgibt, oder?

fgets: "string fgets ( resource handle [, int length])"

Vermutlich sollte ich die zu lesende Länge so kurz wie möglich setzen.

Was genau ist eigentlich eine recource? Sicher kenne ich die Beschreibung im Manual, undich arbeite seit eh und je erfolgreich damit, aber was ist das? Woher kommt es das wenn ich

$line1 = fgets($fp);
$line2 = fgets($fp);

ausführe, das nach der Ersten "Verwendung" der Recource diese verändert wird, also dass automatisch der Zeiger auf die näcgte Zeile gesetzt wird?

Wenn ich jetzt Zeile 2 und 3 will mache ich das mit

$fp= fopen("file.data");
fgets($fp,100);
$line2 = fgets($fp,100);
$line3 = fgets($fp,100);
fclose($fp);

Ist das so wie Ihr es auch machen würdet?

Da die Daten einfach durch Leerzeichen getrennt sind, verwende ich vermutlich lieber:
fgetcsv($fp,100," ");

Viele Grüße
Andreas