Thread Probleme mit Perl-Skript und der Skriptperformance (14 answers)
Opened by Gast at 2004-05-10 16:28

Gast Gast
 2004-05-10 16:28
#82185 #82185
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:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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";
}



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

"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. Weiss jedoch nicht, wie man diese Zeile möglichst Variabel gestalten könnte.

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

edit renee: [code]-Tags spendiert...\n\n

<!--EDIT|renee|1084192585-->

View full thread Probleme mit Perl-Skript und der Skriptperformance