Thread Perl Speicherprobleme mit großen Dateien (W32 Version)
(31 answers)
Opened by Mapache at 2009-05-05 14:38
Ich habe versucht, ihn das was er da als überlange Zeile liest, ausgeben zu lassen. Er soll mir $data ausgeben, wenn er die Schleife mehr als 10000 Mail durchläuft und keinen Zeilentrenner findet. Dann müsste er mir doch eine ewig lange Zeile ausgeben, oder?
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 while(!$fh->eof()) { $line=''; # Daten einlesen solange kein "\n" oder "\r" kommt # overflow couter my $oc = 0; while(index($data,"\x0A") < 0 && index($data,"\x0D") < 0 && $oc < 1000) { $fh->read($buff,1024); # anpassen wenn es zu langsam ist... $data.=$buff; $oc++; if ( $oc gt 10000 ) { print "Overflow detected at line $count:\n"; print $data."\n"; print $buff."\n"; } } # erste Zeile Heraussplitten ("\n" und "\r") gehen verloren # das läuft solange wie $data noch Newlines enthalten # das "split" ist recht langsam, mit "index" und "substr" währe es schneller ($line,$data)=split(/[\x0A\x0D]+/,$data,2); #print $line."\n\n"; #working($line); $count++; if ( ! ( $count % 10000 ) ) { print "$count lines done\n"; } } Es kommt aber nur folgendes: Code: (dl
)
1 1630000 lines done Wie könnt ich denn sagen wir die ersten 10000 Zeichen der Zeile 1695135 und 1695136 einlesen und ausgeben? |