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
#!/usr/bin/perl
use strict;
use warnings;
my @ind = (1, 6);
local $" = "-";
while (<DATA>) {
print "\n$.: $_";
my @parts = split;
for my $i (@ind) {
print "$.: parts besteht aus ", scalar@parts, " Teilen: @parts\nindex=$i\n";
if ($parts[$i] eq "0") {
@parts = (@parts[0..$i], '', @parts[$i+1..$#parts]);
}
else {
while (length($parts[$i+1]) < $parts[$i]) {
if (length($parts[$i+1])+1 == $parts[$i]) {
$parts[$i+1] .= ' ';
}
else {
$parts[$i+1] .= ' ' . splice @parts, $i+2, 1;
}
}
}
}
print "$.: parts besteht aus ", scalar@parts, " Teilen: @parts\n";
print "$.: '$parts[2]', '$parts[7]'\n";
}
Eintrag_eins 20 dies ist interessant blubb bla fasel 42 /home/dummie/meine datei ist so schoen.txt
Eintrag_zwei 0 blubb bla fasel 14 /root/mein.txt
Eintrag_drei 0 blubb bla fasel 0
Eintrag_vier 20 dies ist interessan blubb bla fasel 42 /home/dummie/meine datei ist so schoen.txt
Ausgabe (man beachte Fall 4):
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
1: Eintrag_eins 20 dies ist interessant blubb bla fasel 42 /home/dummie/meine datei ist so schoen.txt
1: parts besteht aus 14 Teilen: Eintrag_eins-20-dies-ist-interessant-blubb-bla-fasel-42-/home/dummie/meine-datei-ist-so-schoen.txt
index=1
1: parts besteht aus 12 Teilen: Eintrag_eins-20-dies ist interessant-blubb-bla-fasel-42-/home/dummie/meine-datei-ist-so-schoen.txt
index=6
1: parts besteht aus 8 Teilen: Eintrag_eins-20-dies ist interessant-blubb-bla-fasel-42-/home/dummie/meine datei ist so schoen.txt
1: 'dies ist interessant', '/home/dummie/meine datei ist so schoen.txt'
2: Eintrag_zwei 0 blubb bla fasel 14 /root/mein.txt
2: parts besteht aus 7 Teilen: Eintrag_zwei-0-blubb-bla-fasel-14-/root/mein.txt
index=1
2: parts besteht aus 8 Teilen: Eintrag_zwei-0--blubb-bla-fasel-14-/root/mein.txt
index=6
2: parts besteht aus 8 Teilen: Eintrag_zwei-0--blubb-bla-fasel-14-/root/mein.txt
2: '', '/root/mein.txt'
3: Eintrag_drei 0 blubb bla fasel 0
3: parts besteht aus 6 Teilen: Eintrag_drei-0-blubb-bla-fasel-0
index=1
3: parts besteht aus 7 Teilen: Eintrag_drei-0--blubb-bla-fasel-0
index=6
3: parts besteht aus 8 Teilen: Eintrag_drei-0--blubb-bla-fasel-0-
3: '', ''
4: Eintrag_vier 20 dies ist interessan blubb bla fasel 42 /home/dummie/meine datei ist so schoen.txt
4: parts besteht aus 14 Teilen: Eintrag_vier-20-dies-ist-interessan-blubb-bla-fasel-42-/home/dummie/meine-datei-ist-so-schoen.txt
index=1
4: parts besteht aus 12 Teilen: Eintrag_vier-20-dies ist interessan -blubb-bla-fasel-42-/home/dummie/meine-datei-ist-so-schoen.txt
index=6
4: parts besteht aus 8 Teilen: Eintrag_vier-20-dies ist interessan -blubb-bla-fasel-42-/home/dummie/meine datei ist so schoen.txt
4: 'dies ist interessan ', '/home/dummie/meine datei ist so schoen.txt'
Das müsste so klappen, denn wenn genau ein Zeichen fehlt, dann muss es ein Leerzeichen am Ende sein. Problematisch wird es nur, wenn Du meldungen mit mehreren Leerzeichen am Ende hast. Dann muss man ggf. irgendwie versuchen, diese zu erkennen oder doch eine andere Methode anwenden. Die liefe dann aber schon auf eine "echte" Textanalyse hinaus.
Edit: Mir fällt gerade auf, man könnte den Code noch beschleunigen (mehrfach verwendete Arrayelemente in Extravariable speicehrn und häufigen Fall in die If-Abfrage und seltenen in den Else-Zweig etc. Aber sowas sollte man nur machen, wenn dies wirklich ein Flaschenhalscodestück sein sollte. Wenn es das ist, sag Bescheid, dann schaue ich es mir daraufhin nochmal an. Anderenfalls gilt das Gebot der Optimierung: Nicht zu optimieren wo es nicht nötig ist.\n\n
<!--EDIT|Crian|1075973266-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite