1
2
3
4
5
6
7
<document name="NAME">
<headline>blablabla</headline>
<paragraph>
<text>bli</text>
<whatever>bla</whatever>
</paragraph>
</document>
1
2
3
4
5
6
7
:document ("NAME"
:headline ("blablabla")
:paragraph (
:text (bli)
:whatever (bla)
)
)
2011-04-12T13:49:05 sureshMeine erste Frage wäre, warum nimmst du kein echtest XML? Würde das dein Leben nicht erheblich erleichtern?
1
2
3
4
5
6
7
8
9
10
11
use strict;
use warnings;
open(FILE,"<new_markup.txt") or die "can't filename: $!";
while(<FILE>) {
print "document entity $1\n" if ($_ =~ /(:document.*)/g);
print "headline entity $1\n" if ($_ =~ /(:headline.*)/g);
}
close FILE;
1
2
3
4
5
6
7
:document ("NAME"
:headline ("blablabla")
:paragraph (
:text (bli)
:whatever (bla)
)
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
use warnings;
my $counter;
open(FILE,"<new_markup.txt") or die "can't filename: $!";
while(<FILE>) {
if ($_ =~ /(:.*\()(\w+)/g) {
$_ =~ s/$2/mach irgendwas/;
}
elsif (/(:.*\()\"(\w+)/g) {
$_ =~ s/$2/mach irgendwas/;
}
if ($_ =~ /\(/) {
$counter ++;
}
if ($_ =~ /\)/) {
$counter --;
}
print $_;
}
close FILE;
print "$counter\n";
2011-04-12T15:52:03 LinuxerMal weiter grübeln und suchen... Ich glaube, pq hatte hier mal einen einfachen Parser hier im Forum dargestellt, den ich vielleicht verwenden kann. Mal schauen, ob ich den Beitrag wiederfinde.
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
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub parse { my $str=shift; my $tree={}; my @now=(\$tree); while($str ne '') { $str=~s/^\s*//s; if($str=~s/^:(\w+)\s*\(//s) { my $name=$1; unshift(@now,\${$now[0]}->{$name}); } elsif($str=~s/^\)//) { shift(@now); } elsif($str=~s/^"([^"]+)"//s) { my $text=$1; # ignore \" while($text=~s/\\"$/"/) { $text.=$1 if($str=~s/^([^"]+)"//s) } ${$now[0]}->{TEXT}.=$text; } elsif($str=~s/^(\w+)//) { ${$now[0]}->{TEXT}.=$1; } elsif($str ne '') { die("FORMAT ERROR ($str)\n"); } } return $tree; } my $str=<<EOT; :document ("NAME" :headline ("blablabla") :paragraph ( :text (bli) :whatever (bla) ) ) EOT print Dumper(parse($str));