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
...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).
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
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 ?
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... )
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.
Ah, FhemWeb. Führende Leerzeichen werden doch im HTML nicht angezeigt. Dafür muss ich doch ein dann ein:
sein.
Grüße Jörg
Damit hast du wohl recht, genauso wie in dem letzten Code-Tag von mir ;D
(das schlägt wohl auch durch, wenn mehrere Leerzeichen zwischendurch auftauchen...)
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.
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).
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.
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 (https://wiki.fhem.de/wiki/DevelopmentModuleAPI#parseParams)). Und da geht es eigentlich immer vorrangig um 1+Leerzeichen.
Leider finde ich grade kein passendes Beispiel...