opi: Pointer ans Ende der Datei setzen mit seek

Beitrag lesen

Hallo Struppi,

ich habe lange nichts mehr von dir gelesen :-)

oder seek FILE, 0, SEEK_END

das wußte ich noch nicht! Supi!

Nun, ich möchte gerne eine Datei ab einer bestimmten Zeile lesen.
Um genau zu sein, die _letzten_ n Zeilen einer Datei. Die Datei
wächst stetig um mehrere Zeilen an.

Da gibt's ein Modul (komm grad nicht auf den Namen) das dürfte aber im Prinzip nichts anderes machen als dein geplantes vorgehen (ausserdem magst du ja keine Module, oder ;-) )

Na mittlerweile wächst mein Interesse an Modulen, da mein Perl immer
besser wird und ich viele Abläufe besser verstehe :-)

Allerdings versuche ich neues Gebiet immer zuerst ohne Modul
anzupacken.

Wie splitte ich am besten jede Zeile in ihre Einzelstrings?
Mit substr oder unpack?

Eine Zeile hat zum Beispiel den Aufbau:

Spalte 1  Spalte 2  Spalte 3  Spalte 4  Spalte 5

dies      ist       ein       test      nummer 1
und       noch      ein       test      nummer 2
schon     wieder    ein       test      nummer 3

Mit split selber würde es nicht gehen, da jeder Delimiter in einer
Spalte selber vorkommen könnte.

bedeutet das das jede Spalte eine fixe Länge hat und keine Tabs drin sind?

Ja genau. Die Datei fülle ich selber mit Daten und ich habe mir
einfach erlaubt, für jede Spalte eine feste Länge zu definieren.
Natürlich hätte ich auch die Daten einfach nebeneinander schreiben
können mit einem Whitespace als Delimiter - in Dateien, bei denen
ein Whitespace in einer Spalte selbst nicht vorkommen würde -,
allerdings müsste ich dann weiterhin mein erstes Beispiel nutzen,
dass leider ab einer bestimmten Größe der Datei sehr lahmt.

Dann würde ich substr verwenden.

Diese Antwort habe ich schon irgendwie erwartet. Ich habe heute
mittag auf irgendeiner Seite gelesen, dass man für mehrere Felder
unpack nutzen sollte. Aber gleichzeitig stand auch dabei, das unpack
um einiges langsamer sein soll als substr. Wann würde es sich also
lohnen, unpack statt substr einzusetzen? Wenn ich nur 5 Felder habe
und 5 mal substr anwende... ok! Aber wie schaut es aus, wenn ich
Beispielsweise 30 Felder zerteilen muss? Würde sich dann eher unpack
lohnen?

Was hälst du denn von meinem zweiten Beispiel? Gibt es eventuell
eine bessere Lösung? Nur her damit :-)

Greez,
opi

--
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|