Elegante Lösung - String kürzen
Rolf Rost
- perl
0 Cheatah0 Norbert Kölln0 Rolf Rost0 Norbert Kölln0 Eternius0 Eternius0 Norbert Kölln0 Rolf Rost0 Eternius
Moin,
hab einen sehr langen String in $name, der soll so gekürzt werden, dass die ersten 8 Zeichen, 2 Punkte, die letzten 8 Zeichen dann drinstehen.
12345678..87654321
Habe das bisher ein bischen umständlich gemacht:
# name in ein array verwandeln
my @a = split //, $name;
# leermachen...
$name = '';
# und neu zusammensetzen
for(0..8){ $name .= $a[$_] }
$name .= '..';
for(-8..-1){ $name .= $a[$_]}
Geht das auch ein bischen eleganter ?
Gruss, Rolf
Hi,
Geht das auch ein bischen eleganter ?
perldoc -f substr
Cheatah
perldoc -f substr
Hajo, damit gehts au ;-)
Gruss von der A5, Rolf
Moin, moin!
Wie wäre es damit:
$name=~s/(.{8}).*(.{8})/$1..$2/;
Alles klar?
Viele Grüße,
Norbert
Moin, moin!
Wie wäre es damit:
$name=~s/(.{8}).*(.{8})/$1..$2/;
Cool ;-! Das können wir noch verbessern, Anker setzen:
$name = ~s/^(.{8}).*(.{8})$/$1..$2/;
Alles klar?
Si!
Gruss, Rolf
Nochmals moin, moin!
Ich habe es ohne Anfangs- und Endemarkierung ausprobiert und es scheint zu funktionieren. Was verbessert denn diese Markierungen?
Norbert
Moin,
Ich habe es ohne Anfangs- und Endemarkierung ausprobiert und es scheint zu funktionieren. Was verbessert denn diese Markierungen?
Danke auf jeden Fall!
Jo, es geht auch ohne die anker. Die jedoch machen die RegEx
1. besser lesbar für den Scriptauthor
2. sicherer
Mit ^anker_vorn ... anker_hinten$ 'passt' der Ausdruck sozusagen genau.
Gruss, Rolf
Ähm,
$name = ~s/^(.{8}).*(.{8})$/$1..$2/;
$name = ~s/^(.{8}).*(.{8})$/$1..$2/;
:-)
gruss
$name = ~s/^(.{8}).*(.{8})$/$1..$2/;
oder muss man das gar nicht escapen?
Ne, muss man nicht.
Norbert
hi,
$name = ~s/^(.{8}).*(.{8})$/$1..$2/;
oder muss man das gar nicht escapen?
Im 'Ersetzungsteil' muss der Punkt nicht maskiert werden.
Gruss, Rolf
danke