Schrift
[thread]5885[/thread]

Arbeiten mit Strings: Entfernung von Leerzeichen

Leser: 3


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2003-11-07 09:04
#69999 #69999
Hallo,

ich bin noch ein Anfänger in Perl und habe folgendes Problem:
Ich habe einen String der am Anfang leerzeichen enthält. Die leerzeichen möchte ich gerne löschen.
z.B.
$string="             abc, def, ghi"

Wie kann ich möglichst einfach die Leerzeichen löschen löschen ?

Vielen Dank
renee
 2003-11-07 09:08
#70000 #70000
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
$string =~ s/^\s+?//;


Erklärung:
^ steht für "Am Anfang des Strings"
\s Whitespaces
+? ein oder mehrere Mal, mit niedriger Gierigkeit
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/
havi
 2003-11-07 10:20
#70001 #70001
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Das hier:
Code: (dl )
s/\s+$//g;

nimmt alle Whitespaces am Ende des strings weg.

Gruss
wolfgangk
 2003-11-07 10:25
#70002 #70002
User since
2003-11-03
11 Artikel
BenutzerIn
[default_avatar]
Vielen Dank, ich habe das getestet, aber der Code "$string =~ s/^\s+?//;" entfernt nur das erste Leerzeichen, aber nicht alle am Anfang
havi
 2003-11-07 10:39
#70003 #70003
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
s/^\s+//g; # g durchsucht den ganzen string wenn du so willst...


Das ? setze ich hier nie!

Gruss
renee
 2003-11-07 10:46
#70004 #70004
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
sorry, mein Fehler, natürlich ohne das ?
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/
havi
 2003-11-07 19:22
#70005 #70005
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Du kannst auch beides in einem schreiben!

Code: (dl )
s/^\s+|\s+$//g:


... macht das gleiche, wie
Code: (dl )
1
2
s/^\s+//g;
s/\s+$//g:


nur das die zweite Variante schneller ist.

Gruss
esskar
 2003-11-07 19:40
#70006 #70006
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
was man vielleicht mal benchmarken sollte ist

Code: (dl )
1
2
3
my $str = "        das ist ein text!";
while(index($str, ' ') == 0) { $str = substr($str, 1); }
print $str;
esskar
 2003-11-07 19:45
#70007 #70007
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bzw. wenn es wirklich leerzeichen sind...

Code: (dl )
s!^ +!!;


@havi: das g kann weg, weil ja nu einmal alle leerzeichen am anfang entfernt werden müssen... wenn das einmal passiert ist, gibt es keinen teilstring in dem string, welches nur leerzeichen enthält und des erstes zeichen das erste zeichen des strings ist... :)

hab keine ahnung wie perl intern gestrickt ist, aber g könnte in dem fall ne bremse sein
havi
 2003-11-07 19:46
#70008 #70008
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
Benchmark: timing 1000000 iterations of index, regex...
index: 2 wallclock secs ( 1.30 usr + 0.00 sys = 1.30 CPU) @ 771010.02/s (n=1000000)
regex: 2 wallclock secs ( 1.09 usr + 0.00 sys = 1.09 CPU) @ 913242.01/s (n=1000000)
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2003-11-07 09:04.