User since
2006-10-14
68
Artikel
BenutzerIn
Hallo,
Frage an die Perl-Experten!
Wie muss ich vorgehen, wenn ich einen String habe bzw. eine Zeile, die komplett aus einer Datei eingelesen wurde und aus dieser Zeile heraus eine Zeichenkette, die eine Zahl beinhaltet, heraussplitten möchte?
Kurz: ich möchte aus einem String eine bestimmte Zeichenkette (in diesem Fall eine Error-Code-Nummer) heraustrennen und dann damit weiterarbeiten!
bspw.
"mein text ist so lang: Error 123 hier geht der text weiter"
"mein text ist so lang: Error 99 hier geht der text weiter"
wie geht man da vor?? reguläre ausdrücke?
Danke im voraus!
Gruss
Kalmuecke
User since
2006-03-29
1520
Artikel
BenutzerIn
my @file = (
'mein text ist so lang: Error 123 hier geht der text weiter',
'mein text ist so lang: Error 99 hier geht der text weiter',
);
my @fehler;
for (@file) {
s/(Error \d+)//g;
push @fehler, $1;
}
print "$_\n" for @file;
print "$_\n" for @fehler;
Ausgabe:
mein text ist so lang: hier geht der text weiter
mein text ist so lang: hier geht der text weiter
Error 123
Error 99
Wenn du direkt eine Datei bearbeiten möchtest empfiehlt sich
Tie::File zu benutzen.\n\n
<!--EDIT|sid burn|1160852115-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
User since
2005-12-17
1615
Artikel
HausmeisterIn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use strict;
use warnings;
use Data::Dumper;
my @vfile = (
'mein text ist so lang: Error 123 hier geht der text weiter',
'mein text ist so lang: Error 99 hier geht der text weiter'
);
my @errs;
while (defined (my $line = shift @vfile)) {
push @errs, $line =~ /(Error \d+)/;
# fuer mehrere Fehlermeldungen in einer Zeile
# push @errs, $_ for $line =~ /(Error \d+)/g;
}
print Dumper(\@errs);
Aber noch viel, viel interessanter koennte fuer das
perlretut sein!\n\n
<!--EDIT|opi|1160851997-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
User since
2003-08-04
14371
Artikel
ModeratorIn
[quote=opi,14.10.2006, 20:51]
[...]
while (defined (my $line = shift @vfile)) {
push @errs, $line =~ /(Error \d+)/;
# fuer mehrere Fehlermeldungen in einer Zeile
# push @errs, $_ for $line =~ /(Error \d+)/g;
}
[...]
[/quote]
Man kann bei mehreren Fehlermeldung in einer Zeile auch einfach
push @errs, $line =~ /(Error \d+)/g;
machen, da man
push auch eine Liste von einzufügenden Elementen übergeben kann.