Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6317[/thread]

String überarbeiten

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2004-06-07 17:42
#83106 #83106
Hallo,

ich versuche von einem String z.B. 123456789B31S die ersten 4 Zeichen und die letzten Beiden abzuschneiden.

Mein Ziel ist es also 56789B3 zu erhalten.

Hat jemand eine Idee wie ich $string bearbeiten kann?

Hab schon eine ganze Zeit gesucht, aber nichts passendes gefunden.

Danke, schon mal im voraus.
Taulmarill
 2004-06-07 17:48
#83107 #83107
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
perldoc -f substr oder http://www.perldoc.com/perl5.8.4/pod/func/substr.html
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
coax
 2004-06-07 17:50
#83108 #83108
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Nichts leichter als das:
Code: (dl )
1
2
3
$string = '123456789B31S';
$string =~ s/^.{4}(.+).{2}$/$1/;
print "$string\n";
,,Das perlt aber heute wieder...'' -- Dittsche
renee
 2004-06-07 18:16
#83109 #83109
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
$string = '123456789B31S';
$string = substr($string,4,(length($string)-6));
print "$string\n";
\n\n

<!--EDIT|renee|1086617821-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-06-07 18:20
#83110 #83110
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Nach dem Hinweis auf substr noch eine RE-Lösung zu bringen ist ... sagen wir mal mutig ;-)
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
coax
 2004-06-07 18:28
#83111 #83111
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Als ich antwortete war ja noch gar kein substr da :-P
,,Das perlt aber heute wieder...'' -- Dittsche
coax
 2004-06-07 18:45
#83112 #83112
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Die RegExp-Variante scheint um einiges schneller zu sein, aber darum geht es mir gar nicht. Wenn ich unbekannten Code vor mir liegen habe moechte ich schnell erkennen was die Anweisung macht und das ist fuer mich eher bei den RegExp der Fall.
Quote
Benchmark: timing 10000000 iterations of regexp, substr...
   regexp: 16 wallclock secs (14.23 usr +  0.03 sys = 14.26 CPU) @ 701213.10/s
(n=10000000)
   substr: 33 wallclock secs (30.75 usr +  0.06 sys = 30.81 CPU) @ 324622.63/s
(n=10000000)

Code: (dl )
1
2
3
4
5
6
use Benchmark;
timethese (10000000, {
    'substr' => sub { my $x = '123456789B31S';
                      $string = substr($string,4,(length($string)-6)); },
    'regexp' => sub { my $x = '123456789B31S';
                      $string =~ s/^.{4}(.+).{2}$/$1/; }});
,,Das perlt aber heute wieder...'' -- Dittsche
coax
 2004-06-07 18:59
#83113 #83113
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
hm.. kein Wunder das der RE so schnell ist, ich hab wieder mal Mist beim Benchmarken gebaut (vergessen die Variable umzubenennen).
So.. hier nun das richtige Ergebnis :-/
Quote
Benchmark: timing 1000000 iterations of regexp, substr...
regexp: 44 wallclock secs (39.13 usr + 0.13 sys = 39.26 CPU) @ 25473.81/s (n=1000000)
substr: 4 wallclock secs ( 3.71 usr + -0.01 sys = 3.70 CPU) @ 270562.77/s (n=1000000)

Code: (dl )
1
2
3
4
5
6
use Benchmark;
timethese (1000000, {
'substr' => sub { my $string = '123456789B31S';
$string = substr($string,4,(length($string)-6)); },
'regexp' => sub { my $string = '123456789B31S';
$string =~ s/^.{4}(.+).{2}$/$1/; }});
\n\n

<!--EDIT|coax|1086620541-->
,,Das perlt aber heute wieder...'' -- Dittsche
Taulmarill
 2004-06-07 19:10
#83114 #83114
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
noch einfacher und schneller ist substr mit angabe von negativen werten für length. das sieht dann so aus
Code: (dl )
$string = substr($string,4,-2);

und wo wir schon mal beim benchmarken sind...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /usr/bin/perl

use strict;
use warnings;
use Benchmark;

timethese (1000000, {
'substr' => sub { my $string = '123456789B31S';
$string = substr($string,4,(length($string)-6)); },
'tauli' => sub { my $string = '123456789B31S';
$string = substr($string,4,-2); },
'regexp' => sub { my $string = '123456789B31S';
$string =~ s/^.{4}(.+).{2}$/$1/; }});

peters@ronin:~/test> perl perl.pl
Benchmark: timing 1000000 iterations of regexp, substr, tauli...
regexp: 40 wallclock secs (40.02 usr + 0.00 sys = 40.02 CPU) @ 24987.51/s (n=1000000)
substr: 7 wallclock secs ( 7.46 usr + 0.00 sys = 7.46 CPU) @ 134048.26/s (n=1000000)
tauli: 6 wallclock secs ( 5.19 usr + 0.00 sys = 5.19 CPU) @ 192678.23/s (n=1000000)
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
coax
 2004-06-07 19:23
#83115 #83115
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=Taulmarill,07.06.2004, 17:10]
Code: (dl )
1
2
use strict;
use warnings;
[/quote]
das haette mich vor Fehlern bewahrt. ;-)
,,Das perlt aber heute wieder...'' -- Dittsche
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-06-07 17:42.