opi: Nichts gefunden aber doch zufrieden.

Beitrag lesen

Hallo Siechfred,

dann gibt es doch auch bestimmt etwas in die andere Richtung, um den
String ohne Leerzeichen zu filtern. Ich muss mal stöbern...

nun ich habe nichts anderes gefunden, als mit regexp die
Leerzeichen zu entfernen.

Meine endgültigen Lösungen sind also:

my $string = "string 0  string 1  string 2  string 3  string 4  string 5  string 6  string 7  string 8  string 9  ";  
  
Benchmark::cmpthese(-1, {  
           'substr'  =>  sub { (my $f0 = substr($string,  0, 10)) =~ s/\s+$//;  
                               (my $f1 = substr($string, 11, 10)) =~ s/\s+$//;  
                               (my $f2 = substr($string, 21, 10)) =~ s/\s+$//;  
                               (my $f3 = substr($string, 31, 10)) =~ s/\s+$//;  
                               (my $f4 = substr($string, 41, 10)) =~ s/\s+$//;  
                               (my $f5 = substr($string, 51, 10)) =~ s/\s+$//;  
                               (my $f6 = substr($string, 61, 10)) =~ s/\s+$//;  
                               (my $f7 = substr($string, 71, 10)) =~ s/\s+$//;  
                               (my $f8 = substr($string, 81, 10)) =~ s/\s+$//;  
                               (my $f9 = substr($string, 91, 10)) =~ s/\s+$//;  
                             },  
           'unpack1' =>  sub { my $field = [ map /^(.+?)\s+$/, unpack ("a10a10a10a10a10a10a10a10a10a10",$string) ]; },  
           'unpack2' =>  sub { my ($f0, $f1, $f2, $f3, $f4, $f5, $f6, $f7, $f8, $f9) = unpack ("a10a10a10a10a10a10a10a10a10a10",$string);  
                               $f0 =~ s/\s+$//;  
                               $f1 =~ s/\s+$//;  
                               $f2 =~ s/\s+$//;  
                               $f3 =~ s/\s+$//;  
                               $f4 =~ s/\s+$//;  
                               $f5 =~ s/\s+$//;  
                               $f6 =~ s/\s+$//;  
                               $f7 =~ s/\s+$//;  
                               $f8 =~ s/\s+$//;  
                               $f9 =~ s/\s+$//;  
                             },  
           'split'   =>  sub { my $field = [ map /^(.+?)\s+$/, split /(.{10})/, $string ]; },  
           'regexp1' =>  sub { my $field = [ map /^(.+?)\s+$/, $string =~ /(.{10})/g ]; },  
           'regexp2' =>  sub { my $field = [ map /^(.+?)\s+$/, $string =~ /(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})/ ]; }  
});

Rate  split2 regexp2 regexp1 unpack1 unpack2  substr
split   25373/s      --    -12%    -16%    -21%    -66%    -71%
regexp2 28709/s     13%      --     -5%    -11%    -61%    -67%
regexp1 30351/s     20%      6%      --     -6%    -59%    -65%
unpack1 32288/s     27%     12%      6%      --    -57%    -62%
unpack2 74472/s    194%    159%    145%    131%      --    -14%
substr  86102/s    239%    200%    184%    167%     16%      --

split und regexp1 fallen weg, falls Spalten unterschiedliche
Längen haben sollten.

substr wäre die schnellste Variante.

Greez,
opi

--
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|