Ich wundere mich über verschiedene Probleme in meinen DOIFs und habe die Vermutung, dass ich etwas falsch mache.
Kann es sein, dass folgender Vergleich gar nicht auf den cmd-Teil 1.3 vergleicht, weil der Punkt evtl. als RegEx oder ähnliches interpretiert wird?
...
[?$SELF:cmd] !~ "1.3|2"
...
Zitatweil der Punkt evtl. als RegEx
Ja klar. Mit =~ wird eine Regexp erwartet.
Versuch mal den Punkt zu "escapen" (wie sagt man das auf Deutsch???)
[?$SELF:cmd] !~ "1\.3|2"
Wobei... "." in Regexp = irgendwelches Buchstaben... inkl "." selbst. Er sollte das schon merken oder?
Jepp. Daran habe ich es bemerkt. Die Bedingungen waren irgendwie fast immer wahr.
Versuch es doch mal als Zahl zu interpretieren, nicht als String.
Ja, das habe ich nun auch so gemacht.
Ich fand halt nur die Variante mit der Pipe | so praktisch, da ich mehrere Werte vergleichen kann. Das geht bei Zahlen dann nicht, oder?
Das dürfte das sein, was du willst:
[?$SELF:cmd] !~ "(1\.3)|2"
für 1.3 oder 2
Edit: oder
[?$SELF:cmd] !~ "1\.(3|2)"
für 1.3 oder 1.2
Wenn wir schon sparen, ist
[?$SELF:cmd]
nicht identisch mit
$cmd
?
Jepp. Das war mir bekannt. Aber Danke dennoch.
Zitat von: Per am 29 Mai 2017, 10:23:45
Wenn wir schon sparen, ist
[?$SELF:cmd]
nicht identisch mit
$cmd
?
ja, $cmd ist eleganter, weil kürzer. Vom Parser übersetzt ist allerdings das Erste eine Funktion, das Zweite eine Variable.
Hmm. Irgendwie ist bei mir noch an einigen Stellen der Wurm drin.
Frage zwischendurch:
Warum funktioniert das hier nicht?
[$SELF:cmd_nr,0] != 3
Aber das hier wohl?
[$SELF:cmd_nr,"0"] !~ /3/
Sind cmd_seqnr, cmd_nr und cmd wirklich alles Dezimalzahlen?
Warum wird dieser Vergleich war, obwohl di_jalousien:cmd eigentlich bei 4.2 steht?
[di_jalousien:cmd] =~ "(1\.3)|2|0"
Danke.
ZitatWarum wird dieser Vergleich war, obwohl di_jalousien:cmd eigentlich bei 4.2 steht?
Weil "4.2" "2" enthält.
Zitat(1\.3)|2|0"
ZitatSind cmd_seqnr, cmd_nr und cmd wirklich alles Dezimalzahlen?
Abhängig von den Zweigen deines DOIF.
Zitat von: amenomade am 03 Juni 2017, 21:39:32
Weil "4.2" "2" enthält.
Schade. Dann muss ich wirklich die längere Schreibweise nutzen. Ich hatte die Hoffnung, es mit RegExp ein wenig kürzer und hübscher zu lösen.
(
[di_jalousien:cmd] == 1.3 or
[di_jalousien:cmd] == 2 or
[di_jalousien:cmd] == 0
)
Zitat von: amenomade am 03 Juni 2017, 21:39:32
Abhängig von den Zweigen deines DOIF.
Ich frage nur, weil ich irgendwann auch mit dem Vergleich als Dezimalzahl Probleme hatte. Aber ich kann mich nicht mehr genua daran erinnern, wieso. Ich hatte den Code noch in den DEFs, aber halt auskommentiert. Damals bin ich scheinbar auf RegExp umgestiegen.
Hätte ich den String "cmd_1_3" irgendwo dauerhaft gespeichert, dann würde ich diese Zeichenketten nutzen.
Doch der Inhalt von "state" geht nach dem Durchlauf aller Sequenzen auf "cmd_1" und nicht auf "cmd_1_3".
Irgendwie finde ich die Speicherung der cmd's ein wenig merkwürdig. Man hat zwar nun jede Menge Dezimalzahlen, aber die Sequenzen bleiben nicht als String gespeichert.
Zitat von: FunkOdyssey am 04 Juni 2017, 14:45:49
Schade. Dann muss ich wirklich die längere Schreibweise nutzen. Ich hatte die Hoffnung, es mit RegExp ein wenig kürzer und hübscher zu lösen.
(
[di_jalousien:cmd] == 1.3 or
[di_jalousien:cmd] == 2 or
[di_jalousien:cmd] == 0
)
Ich frage nur, weil ich irgendwann auch mit dem Vergleich als Dezimalzahl Probleme hatte. Aber ich kann mich nicht mehr genua daran erinnern, wieso. Ich hatte den Code noch in den DEFs, aber halt auskommentiert. Damals bin ich scheinbar auf RegExp umgestiegen.
Hätte ich den String "cmd_1_3" irgendwo dauerhaft gespeichert, dann würde ich diese Zeichenketten nutzen.
Doch der Inhalt von "state" geht nach dem Durchlauf aller Sequenzen auf "cmd_1" und nicht auf "cmd_1_3".
Irgendwie finde ich die Speicherung der cmd's ein wenig merkwürdig. Man hat zwar nun jede Menge Dezimalzahlen, aber die Sequenzen bleiben nicht als String gespeichert.
"=~" ist ein match-Operator und die Angabe rechts davon ein regulärer Ausdruck und keine einfache Zeichenkette, daher musst Du auch die dafür geltenden Regeln berücksichtigen, s. https://perldoc.perl.org/perlre.html
Es kann auch nicht die vereinfachte Syntax der Regexp des notify genutzt werden, wo ^ und $ automatisch zugefügt werden.
Also zu Deinem Beispiel müsste es so klappen.
$cmd =~ "^(1\.3|2|0)\$"
Danke für eure Unterstützung.
Dann habe ich bisher bei vielen meiner DOIFs irgendwie immer Glück gehabt und bin froh, dass ich meine Falschnutzung nur bei unwichtigen Tischleuchte, Sonnenschutz & Co. bemerkt habe. :)