Thread Text zwischen def. Tags in Blöcke mit def. Länge aufteilen.
(11 answers)
Opened by leo11 at 2008-12-21 14:05
Ich bin auf ein unerwartetes Problem mit Klammern gestoßen.
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 #!/usr/bin/perl use strict; use Data::Dumper; use warnings; local $/ = undef; my $data = <DATA>; my @match; @match = $data =~ m|(<Text>[^<]*</Text>)|sg; foreach my $m (@match) { my $prepared_string = prepare_string($m); $data =~ s/$m/$prepared_string/s; } print $data; ## subs ## sub prepare_string { my $string = shift; $string =~ s/\n|<Text>|<\/Text>//g; my $chunk_size = 10; my $prepared_string; for (my $i = 0; $i <= length($string); $i=$i+$chunk_size) { my $part = substr($string, $i, $chunk_size); $prepared_string .= "<Text>$part</Text>\n"; } return $prepared_string; } __DATA__ <Feld><Text>Hallo liebe Perl- Geme(i)nde. diesmal mit leerzeile </Text></Feld><Sig> abc</Sig> <Text>V[iel]e Grüße leo11</Text><Text>ps.: schönen abend</Text> Wenn der Text runde oder eckige Klammern enthält wird er nicht gesplittet. In diesem Fall wird nur das "ps.: schönen abend" gesplittet. Offensichtlich matcht der Ausdruck Code (perl): (dl
)
$data =~ s/$m/$prepared_string/s; @styx-cc bzgl. des auf einmal einlesens: Vielleicht wäre ein Konzept besser dass deinen und meinen Ansatz vermischt. Wir könnten einen zeilenbasierten Match in der Art Code (perl): (dl
)
if ( {<Text>} .. {</Text>} machen, und dann den Teil vorher und nachher herausnehmen. Allerdings ist es dann wieder schlecht wenn bspw. im Teil danach auch ein <Text> kommt. Womit ich wieder bei dem Grund bin, wieso ich im Forum gelandet bin. )-: Ich denke ich gehe erstmal dem Problem mit den Klammern nach. Könnt ihr mir da weiter helfen? |