Schrift
[thread]6988[/thread]

Split erzeugt Leerstrings



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Matthias
 2005-05-12 17:58
#54848 #54848
User since
2005-04-22
18 Artikel
BenutzerIn
[default_avatar]
Hallo,

Noch ein Problem mit Split:

Code (perl): (dl )
1
2
$string = 'asdf QQ';
@array = split /\s+|(Q)/, $string;


Dies liefert nicht nur ein "undef", wo das Leerzeichen erkannt wurde, sondern außerdem je einen Leerstring vor den beiden Q's.

Diese Leerstrings bekome ich zwar mit

Code (perl): (dl )
@array = grep $_, @array;


weg, aber ich verstehe nicht ganz, was da passiert, also wo die Leerstrings herkommen.

Grüße

Matthias
renee
 2005-05-12 18:38
#54849 #54849
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die kommen daher, dass zwischen den Q's nix steht...
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/
pKai
 2005-05-12 19:00
#54850 #54850
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Anscheinend suchst du in dem Fall eher sowas wie:
Quote
@array = $string =~ m/((?:[^\sQ]+)|(?:Q))/g;
\n\n

<!--EDIT|pKai|1115910031-->
I sense a soul in search of answers.
Thorium
 2005-05-12 22:05
#54851 #54851
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was willst du überhaupt tun?
split ist eigentlich der Gegenoperand zu join und unterteilt grosse Listen mit Trennzeichen - meinst du, ist split das richtige für dich bzw. solltest du nicht vielleicht einen regulären Ausdruck verwenden?
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
Matthias
 2005-05-13 00:38
#54852 #54852
User since
2005-04-22
18 Artikel
BenutzerIn
[default_avatar]
@Thorium:
Um das Unterteilen größerer Listen mit Trennzeichen ging es mir auch; allerdings habe ich für das Posting das Beispiel möglichst einfach gewählt.
pq
 2005-05-18 12:14
#54853 #54853
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Matthias,12.05.2005, 15:58]Diese Leerstrings bekome ich zwar mit

Code (perl): (dl )
@array = grep $_, @array;


weg[/quote]
ja, und nullen filterst du damit auch gleich weg. besser grep length, @array
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Matthias
 2005-05-20 16:57
#54854 #54854
User since
2005-04-22
18 Artikel
BenutzerIn
[default_avatar]
@pq:

ja, das habe ich auch schon gemerkt, danke!
Matthias
 2005-05-20 18:10
#54855 #54855
User since
2005-04-22
18 Artikel
BenutzerIn
[default_avatar]
Ergänzung:

Da split mit außer den Leerstrings auch noch undefinierte Elemente liefert, geht es nicht mit grep{length} @array; stattdessen benutze ich
Code (perl): (dl )
grep{defined $_ && $_ ne ''} @array;
Taulmarill
 2005-05-21 15:16
#54856 #54856
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
warum benutzt du nicht einfach die lösung mit look ahead und look behind die ich in deinem anderen thread gegeben habe, dann musst du grep gar nicht erst benutzen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Matthias
 2005-05-22 16:23
#54857 #54857
User since
2005-04-22
18 Artikel
BenutzerIn
[default_avatar]
Mit Lookbehind geht es natürlich auch, danke für den Hinweis!

Wenn du wirklich wissen willst, warum ich den Lookbehind bisher nicht benutzt habe:

Ich arbeite mit dem Kamel-Buch in der 1. deutschen Auflage von 1997 (Übersetzung der 2nd edition von 1996), das zugegebenermaßen längere Ziet in meinem Regal herumstand. Und in der dort beschriebenen Perl-Version gab es noch keinen Lookbehind.
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-05-12 17:58.