[Cologne-pm] große Files parsen

Johannes Huettemeister j.huettemeister at googlemail.com
Mon Jan 16 11:52:10 PST 2006


Hallo nochmal,

ich hab hier ein Codeschnipsel fabriziert, das funktioniert, aber mit
Sicherheit optimiert werden kann.
Zum Hintergrund:
das Programm soll sehr große Dateien einlesen und Zeilenweise bearbeiten,
pattern matchen etc.
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.
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.

sysopen (FILE, $filename, O_RDONLY) or die "$!";
seek(FILE,$offset,$startpos);

my $b = ''; my @f; $togo = 0;
for ($curpos = tell(FILE); my $c = read(FILE, $b, 1024, length($b)) ;
$curpos = tell(FILE)) {
    @f = split(/^/m, $b);
      foreach (@f) {
        unless (m,\n,) {
            $b = $_;
            last;
        }
        do_something_with_line
      }
      last if ($togo++ == 5000);.
}


Dafür gibts doch bestimmt ne Standard Vorgehensweise, oder?

thx und gruss, Jo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/cologne-pm/attachments/20060116/8eac8338/attachment.html


More information about the Cologne-pm mailing list