Thread Text zwischen def. Tags in Blöcke mit def. Länge aufteilen. (11 answers)
Opened by leo11 at 2008-12-21 14:05

leo11
 2008-12-22 07:47
#117389 #117389
User since
2008-08-14
250 Artikel
BenutzerIn
[default_avatar]
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; 
nicht mehr. Recherchen haben mich zu Text::Balanced geführt, nur ist mir nicht klar wie ich damit das Problem beheben kann. Mir leuchtet das Problem auch nicht recht ein.

@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?

View full thread Text zwischen def. Tags in Blöcke mit def. Länge aufteilen.