Hi Folks,
ich würde euch gerne mit einer Verständnissfrage beläßtigen.
Das Einlesen einer großen Datei (5-20 GB) bereitet mir etwas Probleme.
Die Struktur sieht so aus (FASTA-Format falls es jemandem bekannt ist):
Von ">" zu ">" ist immer ein Block, welcher zusammenhängend "ausgewertet" werden möchte ...
(Jede Zeile kann eine andere Länge haben)
Da natürlich bei dieser Größe das Einlesen in z.B. ein Array ja nicht in Frage kommt, muss Zeilenweise gelesen werden.
Nach einigem Suchen musste ich jedoch leider feststellen, dass php keine Funktion bereitstellt um Zeilenweise den Zeiger zu setzten. Lediglich mit fseek kann jedes Zeichen der Datei "angesprochen" werden.
So etwas wie "$file.next();" gibt es wohl in php nicht, oder? Also ein Zeilenweises navigieren durch z.B. große Dateien o.ä.
Die momentan einzige vermeindlich "schöne" Lsg sehe ich nur darin, mir jede Zeigerposition des ersten Zeichens einer neuen Zeile geben zu lassen und wenn benötigt (immer wenn ein neuer Header kommt) so die Möglichkeit zu haben zur vorherigen Zeile zu springen.
So war die eigentliche Idee:
Ich hoffe mein Anliegen konnte ich einigermaßen darlegen.
Hab ich nun eine pfiffige Funktion übersehen, oder muss ich diese etwas unschönen Weg über fseek machen?!
Dankeschön schon mal!
Gruß,
Erdna
ich würde euch gerne mit einer Verständnissfrage beläßtigen.
Das Einlesen einer großen Datei (5-20 GB) bereitet mir etwas Probleme.
Die Struktur sieht so aus (FASTA-Format falls es jemandem bekannt ist):
>header mit ein paar infos (unterschiedliche Längen)
Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header
>header mit ein paar infos (unterschiedliche Längen)
Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header
>header mit ein paar infos (unterschiedliche Längen)
Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header
(Jede Zeile kann eine andere Länge haben)
Da natürlich bei dieser Größe das Einlesen in z.B. ein Array ja nicht in Frage kommt, muss Zeilenweise gelesen werden.
Nach einigem Suchen musste ich jedoch leider feststellen, dass php keine Funktion bereitstellt um Zeilenweise den Zeiger zu setzten. Lediglich mit fseek kann jedes Zeichen der Datei "angesprochen" werden.
So etwas wie "$file.next();" gibt es wohl in php nicht, oder? Also ein Zeilenweises navigieren durch z.B. große Dateien o.ä.
Die momentan einzige vermeindlich "schöne" Lsg sehe ich nur darin, mir jede Zeigerposition des ersten Zeichens einer neuen Zeile geben zu lassen und wenn benötigt (immer wenn ein neuer Header kommt) so die Möglichkeit zu haben zur vorherigen Zeile zu springen.
So war die eigentliche Idee:
PHP-Code:
while (gehe Zeilenweise durch die Datei) {
if (wenn header) {
speicher header temporär (tu noch was damit)
} else {
while (lies nun so lange bis neuer header) {
ebenfalls erst einmal tmp ablegen
}
so nun ganzer block nun bekannt -> tu was
setze den zeiger um eine zeile zurück (um wieder an den nächsten block zu kommen)
}
}
Ich hoffe mein Anliegen konnte ich einigermaßen darlegen.
Hab ich nun eine pfiffige Funktion übersehen, oder muss ich diese etwas unschönen Weg über fseek machen?!
Dankeschön schon mal!
Gruß,
Erdna
Kommentar