Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6491[/thread]

Grosse Dateien öffnen: Ohne TIE::File ? (Seite 3)

Leser: 2


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
Free Faq
 2004-08-13 23:59
#85749 #85749
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,13.08.2004, 19:38]Haendisch: Daten bis zur Position x in eine neue Datei kopieren, z in neue Datei kopieren, Seek in der alten Datei zur Position y und den Rest in die neue Datei kopieren. Wenn du fertig bist, musst du ein rename von der neuen Datei zur alten Datei machen.

Ohne temporaere Datei geht es nur, wenn du die Daten hinter Position y in den Speicher einliest.

EDIT: Tie::File-Hinweis entfernt.[/quote]
Die Idee kam mir auch, aber die ist hier glaub irgendwie unangebracht. Dann muss ich ja praktisch wieder mit der ganzen Datei arbeiten, was ich ja eigendlich vermeiden wollte.
Haut mich nicht, ich bin ein Noob!
esskar
 2004-08-14 00:19
#85750 #85750
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
jein...
du brauchst sie aber dafür nicht komplett in den speicher zu laden, wenn du sie kopierst...
nur blockweise
Strat
 2004-08-14 22:42
#85751 #85751
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=ptk,13.08.2004, 14:35]...Am Ende dieser Datei kamen periodisch neue Daten dazu. Ich habe nun Tie::File verwendet und einfach eine Schleife for(my $i = $#file; $i>=0; $i--) { ... } gemacht, um die Anfangszeile der neu dazugekommenen Daten festzustellen. Leider liest Tie::File *immer* die gesamte Datei ein, so dass es relativ lange gedauert hat, auch wenn nur ganz wenig oder gar keine neuen Daten dazugekommen sind. Nach dem Umsteigen auf File::ReadBackwards ist die Performance ertraeglich geworden.[/quote]
also so eine art tail -f? dafuer wuerde ich dann aber auch nicht Tie::File nehmen, sondern lieber mit seek arbeiten

Die ganze Datei: eigentlich sollte es sich nur durch die gesammte datei durchwursteln, nicht aber die ganze datei gleichzeitig im RAM halten. Falls du sie doch komplett im RAM halten willst, musst du den parameter 'memory' auf ein oberes limit setzen; ich glaube, das standardlimit ist irgendwas zwischen 1 und 5 MB...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2004-08-16 14:12
#85752 #85752
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Strat,14.08.2004, 20:42]also so eine art tail -f? dafuer wuerde ich dann aber auch nicht Tie::File nehmen, sondern lieber mit seek arbeiten[/quote] Nein, eher ein tail -r, oder bei Linux heisst das tac.

Quote
Die ganze Datei: eigentlich sollte es sich nur durch die gesammte datei durchwursteln, nicht aber die ganze datei gleichzeitig im RAM halten. Falls du sie doch komplett im RAM halten willst, musst du den parameter 'memory' auf ein oberes limit setzen; ich glaube, das standardlimit ist irgendwas zwischen 1 und 5 MB...

Die Datei selbst wird nicht im RAM gehalten, aber fuer jede Zeile wird zumindest die Seek-Position aufgezeichnet. Das kann wegen der relativ ineffizienten Speicherung von Integers unter Perl schon einige MBs gross werden.
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2004-08-12 22:06.