Thread bestimmte Positionen in text Datei auslesen
(11 answers)
Opened by perle at 2013-07-12 12:39
Ich würde immer einen Block auf einmal lesen und nicht zeilenbasiert. Damit hast Du immer alle Informationen die zusammengehören auch zusammen. Ich interpretiere aus Deinen Angaben, dass "ENDJOB" der Schluss eines Blocks ist.
Daraus würde sich ergeben: Code (perl): (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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @excel_rows; # blockweises einlesen und nicht zeilenweise # ein block endet mit "ENDJOB" local $/ = "ENDJOB\n"; # einlesen der daten, hier aus __DATA__. Dies auf # das Einlesen einer Datei zu übertragen bleibt dem geneigen # Leser überlassen while ( my $block = <DATA> ) { my @found = $block =~ m{ ^ TYPE \s+ RFORM \s+ REC-SIZE \s+ # finde die Zeile (\w+) \s+ (\w+) \s+ (\d+) .*? # erste gruppe ist type # zweite gruppe ist RFORM # dritte gruppe ist REC-SIZE ^ CREATION \s+ LAST-RD \s+ (\d{4}-\d{2}-\d{2} \s+ \d{2}:\d{2}:\d{2}) \s+ # creation (\d{4}-\d{2}-\d{2} \s+ \d{2}:\d{2}:\d{2}) \s+ # last-rd .*? ^ STATE \s+ EXEC_COPIES \s+ (\w+) \s+ (\d+) .*? ^ DATA-BEGIN \s+ DATA-END \s+ RELEASE \s+ (\d{4}-\d{2}-\d{2} \s+ \d{2}:\d{2}:\d{2}) \s+ # found-begin (\d{4}-\d{2}-\d{2} \s+ \d{2}:\d{2}:\d{2}) \s+ # found-end (\d{4}-\d{2}-\d{2} \s+ \d{2}:\d{2}:\d{2}) \s+ # release }xms; my %info = ( TYPE => $found[0], RFORM => $found[1], 'REC-SIZE' => $found[2], CREATION => $found[3], 'LAST-RD' => $found[4], STATE => $found[5], EXEC_COPIES => $found[6], 'DATA-BEGIN' => $found[7], 'DATA-END' => $found[8], RELEASE => $found[9], ); push @excel_rows, \%info; } print Dumper \@excel_rows; __DATA__ LISTFILE:DIRECTORY NAME=MAX:\TEST.0001; STARTED STARTING TIME 2013-07-05 21:24:01 USER MACHINE4/HEIMO 220: SERVICE READY FOR NEW USER. SUPI 230: USER LOGGED IN, PROCEED. SUPI TYPE RFORM REC-SIZE SAM FIX 8192 CREATION LAST-RD 2010-05-13 00:37:32 2013-07-05 12:56:17 STATE EXEC_COPIES READY 2 DATA-BEGIN DATA-END RELEASE 2013-07-05 12:05:10 2013-07-05 12:23:48 2013-07-05 12:56:52 ENDJOB LISTFILE:DIRECTORY NAME=MAX:\TEST.0001; STARTED STARTING TIME 2013-07-05 21:24:01 USER MACHINE4/HEIMO 220: SERVICE READY FOR NEW USER. SUPI 230: USER LOGGED IN, PROCEED. SUPI TYPE RFORM REC-SIZE SAM FIX 8200 CREATION LAST-RD 2010-05-12 00:37:32 2013-07-06 12:56:17 STATE EXEC_COPIES READY 3 DATA-BEGIN DATA-END RELEASE 2013-07-06 12:06:10 2013-07-06 12:26:48 2013-07-06 12:58:52 ENDJOB liefert Code: (dl
)
1 $VAR1 = [ OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/) -- Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html Perl-Entwicklung: http://perl-services.de/ |