Thread Text zwischen def. Tags in Blöcke mit def. Länge aufteilen.
(11 answers)
Opened by leo11 at 2008-12-21 14:05
Hallo liebe Perl-Fans.
Ich habe ein Programm geschrieben, dass den Text: BEFORE> <Text>ZeileA ZeileB ZeileC</Text>After <Text>Zeile1 Zeile2 Zeil3</Text>After2 in folgenden umwandelt: BEFORE> <Text>Zeil</Text> <Text>eA Z</Text> <Text>eile</Text> <Text>B Ze</Text> <Text>ileC</Text> After <Text>Zeil</Text> <Text>e1 </Text> <Text>Zeil</Text> <Text>e2 Z</Text> <Text>eil3</Text> After2 Das Programm sieht so aus: 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 #!/usr/bin/perl -n BEGIN { use strict; use warnings; #use Data::Dumper; my $filename = $ENV{FILENAME}; unless (defined($filename)) {die "No filename in environment (filename)\n";} @ARGV = $filename; my $flag = '0'; my @lines; my $whole_match; my @part_before_match; my @part_after_match; my @number_of_matches; } if ( $_ =~ m/<Text>/ ) { $flag = '1'; } if ( $flag == '1' ) { $_ =~ s/\r\n//; $_ =~ s/\n//; $whole_match = $whole_match . $_ . " "; if ( $_ =~ m/<\/Text>/ ) { $flag = '0'; @number_of_matches = $whole_match =~ m/(Text>)/g; if ( scalar(@number_of_matches) > 2 ) { die "More then one Text in one line."; } @part_before_match = $whole_match =~ /(.*)(?=<Text>)/; @part_before_match->[0] =~ s/^ *$//g; @part_after_match = $whole_match =~ /(?<=<\/Text>)(.*)/; @part_after_match->[0] =~ s/^ *$//g; $whole_match =~ s/[^<]*<Text>//; $whole_match =~ s/<\/Text>.*//s; @lines = $whole_match =~ m/(.{1,4})/g; if ( defined @part_before_match && @part_before_match->[0] ne "") {print "@part_before_match\n";} #print Dumper @part_before_match; foreach my $line (@lines) { print " <Text>$line</Text>\n"; } if ( defined @part_after_match && @part_after_match->[0] ne "") {print "@part_after_match\n";} #print Dumper @part_after_match; undef @lines; undef $whole_match; undef @part_before_match; undef @part_after_match; undef @number_of_matches; } } else { print; } a.)So richtig überzeugt bin ich von meiner Umsetzung nicht. Was haltet ihr davon? b.)Für die Dateien die ich habe macht es seinen Dienst. Trotzdem würd ich gern den Fall abfangen, dass es auch geht wenn ich Zeilen habe in denen mehr als einmal die Kombination <Text>....</Text> vorkommt. |