Hallo nochmal,<br>
<br>
ich hab hier ein Codeschnipsel fabriziert, das funktioniert, aber mit Sicherheit optimiert werden kann.<br>
Zum Hintergrund:<br>
das Programm soll sehr große Dateien einlesen und Zeilenweise bearbeiten, pattern matchen etc.<br>
Dafür wird die Datei in 1024 byte große Stücke (und davon 5000, dann
wird was anderes gemacht, dann die nächsten 5000 usw) eingelesen.<br>
Besonders schwach find ich wie ich daraus dann wieder Zeilen mache um
diese zu bearbeiten (parsen): am Zeilenanfang splitten und wenn kein
Zeilenumbruch da ist, das nächste Stück einlesen.<br>
<br>
sysopen (FILE, $filename, O_RDONLY) or die &quot;$!&quot;;<br>
seek(FILE,$offset,$startpos);<br>
<br>
my $b = ''; my @f; $togo = 0;<br>
for ($curpos = tell(FILE); my $c = read(FILE, $b, 1024, length($b)) ; $curpos = tell(FILE)) {<br>
&nbsp;&nbsp;&nbsp; @f = split(/^/m, $b);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (@f) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unless (m,\n,) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $b = $_;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do_something_with_line<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last if ($togo++ == 5000);.<br>
}<br>
<br>
<br>
Dafür gibts doch bestimmt ne Standard Vorgehensweise, oder?<br><br>
thx und gruss, Jo <br>