Thread bitte um Hilfe bei Optimierung eines Skripts
(7 answers)
Opened by McSvenster at 2008-11-19 00:38
ah, danke. Aber wenn im zweiten Feld schon Leerzeichen enthalten sind, würde split dort trennen, oder?
Ich habe den Entwurf von Linuxer folgendermassen adaptiert: 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 #! /usr/bin/perl use strict; use warnings; use File::Spec::Functions qw( catfile ); my $textfile = 'Test.txt'; my $outputdir = './output'; # eingabedatei lesend oeffnen open my $fh, '<', $textfile or die "$textfile: $!\n"; # hilfsvariablen fuer die while-schleife my $vorige_nummer; my $wh = undef; # schreibhandle while ( my $line = <$fh> ) { # see perldoc perlvar local $, = local $\ = "\n"; # perldoc -f split my $nummer = substr($line,0,9); my $feld = substr($line,10,5); my $inhalt = substr($line,21); chomp $inhalt; # sind wir am anfang oder hat $nummer einen neuen Wert? if ( not defined $vorige_nummer or $nummer != $vorige_nummer ) { # $wh ist definiert, somit muss die ausgabe fuer die # aktuelle datei beendet werden; if ( defined $wh ) { print $wh xml_outro(); # close $wh or die "$outfile: $!\n"; #outfile noch nicht definiert?? close $wh or die "geht nix\n"; # $wh muss undef sein, damit open den skalar wieder nutzen kann # perldoc -f open $wh = undef; } # Ausgabedatei benennen my $outfile = catfile( $outputdir, "$nummer.xml" ); # eigentlich open my $wh; aber wir betreiben recycling ;) open $wh, '>', $outfile or die "$outfile: $!\n"; # xml intro ausgeben print $wh xml_intro( $nummer ); } # aktuelles feld ausgeben print $wh xml_field( $feld, $inhalt ) or die "cannot print to output file: $!"; # nummer merken $vorige_nummer = $nummer; } close $fh or die "$textfile: $!\n"; sub xml_field { my ( $feldname, $inhalt ) = @_; return sprintf '<field name="%s">%s</field>', @_; } sub xml_intro { return sprintf "<add><doc>\n<field name=\"id\">%s</field>", $_[0]; } sub xml_outro { return "</add></doc>"; } __END__ Das funktioniert schon sehr gut, bis auf eine Kleinigkeit: Nur im letzten XML- File fehlt das outro . Ich steige noch nicht hinter die Logik. Viele Grüsse S. |