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

Crian
 2004-05-10 17:23
#82186 #82186
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Irgendwas passt da nicht. Wenn Du Zeilenweise liest, musst Du sammeln, bis /^"\$/ zutrifft und das gesammelte dann ausgibst. So öffnest Du doch für jede Zeile eine Datei.


Edit: Ich würd es folgender Maßen machen

Code: (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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/perl
use strict;
use warnings;

my @Buffer = ();

while (<DATA>) {
   push @Buffer, $_;
   if ($Buffer[-1] =~ /^"\$/) {
       if (@Buffer <= 1) {
           warn "Korrupte Daten vor Zeile $.";
       }
       else {
           (my $fn = $Buffer[1]) =~ s~^\s*"([^"]+).*$~$1~;
           unless (length $fn) {
               warn "Kann Dateinamen vor Zeile $. nicht ermitteln.";
           }
           else {
               chomp $fn;
               $fn .= '.csv';
               open(OUT, ">$fn") or die "Cannot open '$fn': $!";
               print "[DEBUG] '$fn': open ok\n";
               for my $buf (@Buffer) {
                   print OUT $buf;
               }
               close(OUT) or warn "Cannot close '$fn': $!";
               print "[DEBUG] '$fn': close ok\n";
           }
       }
       @Buffer = ();
   }
}

_ _DATA_ _
"beginn erster Datensatz" "" ""
"matthew01" "" ""
"texttexttexttetx text text" "" ""
"texttext text" "" "98387"
"text, text" "" ""
"text" "" ""
"" "" ""
"text" 0.00 0.00
"$" "" ""
"" "" ""
"matthew02" "" ""
"" "" ""
"texttext text" "5330146514" ""
"" "" ""
"text, text" "" ""
"" "" ""
"text" "30.06.1999" ""
"$" "" ""
"" "" ""
"matthew03" "" ""
"" "" ""
"texttext text" "5330146514" ""
"" "" ""
"text, text" "" ""
"" "" ""
"text" "30.08.2000" ""
"$" "" ""
"" "" ""
"matthew04" "" ""
"" "" ""
"texttext text" "5330146514" ""
"" "" ""
"text, text" "" ""
"" "" ""
"text" "30.08.2000" ""
"$" "" ""


Wenn Du die Ende-Kennzeichnerzeilen nicht mit in den Datensätzen haben willst, alle Indizes von 0 bis $#Buffer-1 ausgeben.

Also

Code: (dl )
1
2
3
                for my $ind (0..$#Buffer-1) {
print OUT $Buffer[$ind];
}
\n\n

<!--EDIT|Crian|1084197757-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Probleme mit Perl-Skript und der Skriptperformance