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
use strict; use warnings; my ($ordner)="daten_2/"; my ($ausgabe)="result/"; my ($m,$gmd,$gmd3,$name); my (@files)=(); opendir DIR,$ordner; @files = readdir(DIR); closedir(DIR); foreach $m (@files) { next if $m =~ /\.$/; open FH,$ordner.$m or die "Fehler beim oeffnen von $m\n"; print "verarbeite $m ...\n"; while(<FH>) { chomp; $gmd=substr($_,0,4); if ( !$gmd3 ) { #am Anfang... $gmd3=$gmd; open (GM,">>".$ausgabe.$gmd ); } if ( $gmd eq 'ENDE') { #Ende Kennung muss zum letzten Block $gmd=$gmd3; } if ( $gmd3 ne $gmd ) { #neue Station... close(GM); $gmd3=$gmd; open (GM,">>".$ausgabe.$gmd ); } print GM $_."\n"; } close(GM); close(FH); }
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
#!/usr/bin/perl use strict; use warnings; use File::Spec; my $ordner='source'; my $ausgabe='result'; opendir(my $dh,$ordner) or die("Error open $ordner ($!)\n"); while(my $file=readdir($dh)) { my $path=File::Spec->join($ordner,$file); next unless(-f $path); if(open(my $fh, '<', $path)) { local $/="ENDE\n"; while(my $block=<$fh>) { $block=~s/ENDE\s*$//; next unless($block); my ($name)=$block=~/^(.+?)\s+\d+/; next unless($name); my $out_path=File::Spec->join($ausgabe,$name); if(open(my $ofh, '>', $out_path)) { print $ofh $block; close($ofh); } else { warn("Error open $out_path ($!)\n") } } close($fh); } else { warn("Error open $path ($!)\n"); } } closedir($dh);
2012-05-22T09:57:51 Trommelwirbelhättest du vielleicht auch ein hinweis, wie es vielleicht mit meinem code gehen könnte?
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
use strict; use warnings; my ($ordner)="daten_2/"; my ($ausgabe)="result/"; my ($m,$gmd,$name); my $gmd3 = ''; my $gm; my (@files)=(); opendir DIR,$ordner; @files = readdir(DIR); closedir(DIR); -d $ausgabe or mkdir $ausgabe; foreach $m (@files) { next if -d $m; open (my $fh, '<', $ordner.$m) or die "Fehler beim oeffnen von $m\n"; print "verarbeite $m ...\n"; while(<$fh>) { $gmd=substr($_,0,4); if ( $gmd eq 'ENDE') { #Ende Kennung muss zum letzten Block $gmd=$gmd3; } if ( $gmd3 ne $gmd ) { #neue Station... $gmd3=$gmd; my ($file) = /(.+?) \d/; open ($gm,">>", $ausgabe . $file ) or die "Fehler beim oeffnen von $ausgabe.$gmd\n"; } print $gm $_; } close($gm); close($fh); }
Quote... welche dann zum Beispiel dann 'OBSTBNID versiegelt' heißen soll oder 'KALLLUFTDRUCK', also jeweils wie die erste Zeile eines neuen Abschnitts.