Probleme mit Perl Skript / Skript-Performance?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit Perl Skript / Skript-Performance?

    Hallo zusammen!

    Habe ein Problem mit einem Perl-Skript:

    Eine Datenbank-Export Datei (ascii-Datei) mit ca. 15.000 Datensätzen und einer Größe von
    ca. 500Mb, bei welcher sich zwischen jedem Datensatz eine
    Zeile mit einem $-Zeichen als Trennhinweis befindet, möchte ich in jeden
    einzelnen Datensatz zerlegen/zerschneiden lassen (also in ca. 15.000 einzelne Dateien).
    Dazu nimmt das Script einfach den Text zwischen zwei Trennzeilen und fügt diesen in eine
    leere, neu-erstellte Datei ein, deren Name sich aus der zweiten Zeile eines jeden
    Datensatzes ergibt!

    Nun das Skript:

    #!/usr/bin/perl -w
    use strict;
    $/ = qq{"\$"\t""\t""\n};
    my $inputfile = 'C:\test.asc';
    open A, $inputfile or die "Cannot open '$inputfile': $!";

    while ( <A> ) {
    my ($file) = /\n.*?"(.*?)"/ or next;
    open B, "> $file.csv"
    or warn( "Cannot open '$file': $!" ), next;
    print "[DEBUG] '$file': open ok\n";
    chomp $_;
    print B $_;
    close B or warn( "Cannot close '$file': $!" ), next;
    print "[DEBUG] '$file': close ok\n";
    }
    __END__


    Eine Test-Datei (hier z.B. test.asc) könnte folgenden Inhalt haben (zwischen den ""
    befinden sich immer Tab-Vorschübe, keine Leerzeichen!):

    "beginn erster Datensatz" "" ""
    "text" "" ""
    "texttexttexttetx text text" "" ""
    "texttext text" "" "98387"
    "text, text" "" ""
    "text" "" ""
    "" "" ""
    "text" 0.00 0.00
    "$" "" ""
    "" "" ""
    "mögliche Überschrift zweiter Datensatz" "" ""
    "" "" ""
    "texttext text" "5330146514" ""
    "" "" ""
    "text, text" "" ""
    "" "" ""
    "text" "30.06.1999" ""
    "$" "" ""
    "" "" ""
    "mögliche Überschrift dritter Datensatz" "" ""
    "" "" ""
    "texttext text" "5330146514" ""
    "" "" ""
    "text, text" "" ""
    "" "" ""
    "text" "30.08.2000" ""
    "$" "" ""
    "" "" ""
    "mögliche Überschrift vierter Datensatz" "" ""
    "" "" ""
    "texttext text" "5330146514" ""
    "" "" ""
    "text, text" "" ""
    "" "" ""
    "text" "30.08.2000" ""
    "$" "" ""


    Wenn ich obiges Script nun bei einer kurzen Test-Datei ausführe funktioniert es auch
    wunderbar und ich erhalte 4 Dateien mit den passenden Dateinamen (jeweils die zweite Zeile
    eines Datensatzes).

    Nun jedoch meine Fragen:
    1. Wenn ich versuche das Script über die große 500Mb-Datei laufen lassen, bricht es nach
    längerer Zeit ab und meldet 'Die Batch-Datei konnte nicht gefunden werden!'. Woran könnte
    das liegen? Weitere Fehler-Meldungen werden nicht ausgegeben und Dateien werden auch nicht
    erstellt!

    2. Wie muss ich die Variable für die Trennzeile definieren, damit alle möglichen Varianten
    der Trennzeilen abgedeckt werden, z.B.:
    "$" "" ""
    "$" "" "" ""
    "$" "" "" "" ""
    bisher wird ja nur "$" "" "" als Trennzeile erkannt.

    3. Kann es sein, dass dieses Skript zu Speicheraufwendig arbeitet? Habe jedoch keine
    leider keine Ahnung, wie man es optimieren könnte :-(

    Über Antworten zu den Fragen würde ich mich freuen!

    Vielen Dank fürs Lesen und eventuelle Antworten!

    Matthias

  • #2
    Hallo,

    Ich hab solche Datenmengen noch nicht probiert, gehe aber fest davon aus das 500MB zuviel sind, es waere besser wenn du die datei mit sysopen oeffnest und das ganze dann (5000 oder mehr) byteweise mit read ausliest.

    selfhtml


    Byteandi
    Sport Dates

    Kommentar

    Lädt...
    X