Hauptmenü

(geklärt) Frage zu split

Begonnen von TomLee, 12 Mai 2021, 14:50:14

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

ja im Anfängerbereich ...

Wenn ich hier missed_call: 0123456789 (Willi Mueller) einfach nur am Doppelpunkt splitte:
{ my $EVENT= 'missed_call: 0123456789 (Willi Mueller)';;my @mc = split (/:/,$EVENT);; return $mc[1]}
bekomme ich mit $mc[1]
0123456789 (Willi Mueller)
zurück, das Leerzeichen vor der Nummer wird nicht in das Array mit übergeben.

Ich hätte erwartet das ich es mit :. splitten muss
{ my $EVENT= 'missed_call: 0123456789 (Willi Mueller)';;my @mc = split (/:./,$EVENT);; return $mc[1]}
dass das Leerzeichen nicht mit übergeben wird.

Weil wenn ich zwei Zeichen nach dem Doppelpunkt splitte
{ my $EVENT= 'missed_call: 0123456789 (Willi Mueller)';;my @mc = split (/:../,$EVENT);; return $mc[1]}
das Leerzeichen ja mitgezählt wird:
123456789 (Willi Mueller)

Versteht mich wer und kanns mir erklären warum das so ist/was ich bei der Übergabe noch nicht verstanden habe ?

Gruß

Thomas




Beta-User

...scheint normal zu sein, dass das Leerzeichen speziell behandelt wird:
ZitatAn empty leading field is produced when there is a positive-width match at the beginning of EXPR. For instance:
print join(':', split(/ /, ' abc')), "\n";
produces the output :abc. However, a zero-width match at the beginning of EXPR never produces an empty field, so that:
print join(':', split(//, ' abc'));
produces the output  :a:b:c (rather than : :a:b:c).
(aus https://perldoc.perl.org/functions/split).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

JoWiemann

Hm,

wenn ich:


{ my $EVENT= 'missed_call: 0123456789 (Willi Mueller)';;my @mc = split (/:/,$EVENT);; return "TestLeer" . $mc[1]}


ausführe, bekomme ich: TestLeer 0123456789 (Willi Mueller) als Ergebnis. Ist es also eher an Anzeigeproblem?

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

TomLee

Es gibt gar kein Problem, ich möchte nur verstehen warum man einfach am Doppelpunkt splitten kann und das Leerzeichen ignoriert/nicht mit übergeben wird.
Vlt. ist das ja auch normal das bei der Übergabe in ein Array die Leerzeichen ausgelassen/nicht übergeben werden und mir fällt das heute erst bewusst auf ?

Beta-User

Na ja, das Seltsame ist ja, dass man mit JoWiemann's Test ein Leerzeichen reinbekommt, aber mit dem hier auch nur _ein_ Leerzeichen:
{ my $EVENT= 'missed_call: 0123456789 (Willi Mueller)';;my @mc = split (/:/,$EVENT);; return "1 $mc[1]"}

(Man könnte meinen, an der Stelle kommt  durch, dass Perl irgendwie doch den Schwerpunkt auf einer Art "Sprachverarbeitung" hat, die an der Stelle irgendwie was "hinmogelt", das _vermutlich_ zu den Erwartungen des Code-Erstellers paßt... )
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

Ups, Tatsache ich hab mir das Beispiel nicht richtig angeschaut gehabt.

{ my $EVENT= 'missed_call: 0123456789 (Willi Mueller)';;my @mc = split (/:/,$EVENT);; return "TestLeer".$mc[1]}

Dann ist das Leerzeichen vorhanden.

Wenn ich es mit return in FHEMWEB ausgeben lasse ist es nicht vorhanden, mit print im Log dann schon:

{ my $EVENT= 'missed_call: 0123456789 (Willi Mueller)';;my @mc = split (/:/,$EVENT);; print $mc[1]}

Ergebnis:
0123456789 (Willi Mueller)

Zieh ich für mich raus das nächste mal mit print zu testen oder gleich in Eclipse.

JoWiemann

Ah, FhemWeb. Führende Leerzeichen werden doch im HTML nicht angezeigt. Dafür muss ich doch ein dann ein:


 


sein.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

TomLee

Damit hast du wohl recht, genauso wie in dem letzten Code-Tag von mir  ;D

Beta-User

(das schlägt wohl auch durch, wenn mehrere Leerzeichen zwischendurch auftauchen...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

Ist ja jetzt geklärt, anderes Thema, aber immer noch Leerzeichen betreffend und das ist mein Thread.

Was ist hier jetzt ursächlich dass das Leerzeichen nach dem Doppelpunkt in der APP "gefressen" wird, auch HTML (der APP) ?

defmod not_cm_example_missedcall notify cm_example:missed_call:.* {\
my @mc = split (/:/,$EVENT);;\
return fhem("set tb_TelegramBot msg Verpasster Anruf:$mc[1]")}


oder so

defmod not_cm_example_missedcall notify cm_example:missed_call:.* {\
my @mc = split (/:/,$EVENT);;\
return fhem("set tb_TelegramBot msg Verpasster Anruf: $mc[1]")}


macht keinen Unterschied, es gibt immer nur ein Leerzeichen, das aus dem Array.

Beta-User

#10
Ich vermute: Es war da, ist aber später einem anderen split zum Opfer gefallen, nämlich einem, das "ein oder mehrere Leerzeichen" als Trenner verwendet (wie das bei der Analysen von FHEM-Befehlen häufig gemacht wird).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

#11
Ich meine du hast mich missverstanden, es geht jetzt nicht um den Doppelpunkt im split sondern um das Leerzeichen nach dem Doppelpunkt im FHEM-Befehl nach Anruf.

Beta-User

Schon klar, dass es um das fehlende 2. Leerzeichen geht, nicht den Doppelpunkt.

Viele/die meisten SetFn verwenden einen split-Befehl, um die Elemente zu trennen (oder (wenige) alternativ: parseParams). Und da geht es eigentlich immer vorrangig um 1+Leerzeichen.
Leider finde ich grade kein passendes Beispiel...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors