Meine Wetterstation hat ein Reading "windDirectionText" - allerdings in englisch. Nun lasse ich ein userReading "Windrichtung" in deutsch erstellen.
Windrichtung {my $text = ReadingsVal($name,"windDirectionText","leer");; $text =~ s/E/O/g;; return $text}
Geht das auch kürzer?
Gruß Jens
Willst du nur das Reading auf deutsch oder auch den Inhalt?
Es geht um den Inhalt.
Ich glaube mal irgendwo sowas gesehen zu haben, was aber nicht funktioniert:{ReadingsVal($name,"windDirectionText","leer") =~ s/E/O/g}
Du vergleichts nur den Inhalt, wobei das Regex "s/E/O/g" eigentlich so "s\E\O\g" lauten müsste.
Bin mir aber nicht sicher was das bewirkt..
Grundlegend müsstest du den Inhalt ersetzen, so in etwa (ungetestet):
Windrichtung:windDirectionText.* {my %text = ("nord" => "Nord", "east" => "Ost", "south" => "Sued", "west" => "West"); $text{ReadingsVal($name,"windDirectionText","leer")}}
Zitat von: frober am 02 Januar 2022, 19:58:42
Du vergleichts nur den Inhalt, wobei das Regex "s/E/O/g" eigentlich so "s\E\O\g" lauten müsste.
Bin mir aber nicht sicher was das bewirkt..
s/E/O/g
ersetzt alle (!) E mit O. Wenn ich jetzt davon ausgehe, dass im Reading die Werte N,E,S und W (oder Mischungen wie NNE) vorkommen können, reicht das um den Inhalt einzudeutschen.
Das mit den Backslashes ist Quatsch!
Die korrekte Funktion ist ja anscheinend auch schon gegeben. Es wurde nur gefragt, ob das nicht kürzer (wahrscheinlich ist eleganter gemeint) geht.
Wahrscheinlich könnte man das auch mit eventMap lösen.
gb#
Zitat von: Benni am 02 Januar 2022, 20:09:19
s/E/O/g
ersetzt alle (!) E mit O. Wenn ich jetzt davon ausgehe, dass im Reading die Werte N,E,S und W (oder Mischungen wie NNE) vorkommen können, reicht das um den Inhalt einzudeutschen.
Das mit den Backslashes ist Quatsch!
Die korrekte Funktion ist ja anscheinend auch schon gegeben. Es wurde nur gefragt, ob das nicht kürzer (wahrscheinlich ist eleganter gemeint) geht.
Wahrscheinlich könnte man das auch mit eventMap lösen.
gb#
Er hatte aber zum Schluss geschrieben, dass es nicht funktioniert.
Mit den Slash, ok. Regex habe ich noch nicht so verinnerlicht. :D
An NUR Buchstaben habe ich nicht gedacht. ::)
Zitat von: Benni am 02 Januar 2022, 20:09:19
Es wurde nur gefragt, ob das nicht kürzer (wahrscheinlich ist eleganter gemeint) geht.
Ja, das war gemeint.
Danke für eure Ratschläge.
{(my $text = ReadingsVal($name,"windDirectionText","leer")) =~ s/E/O/g ;;return $text}
... ist etwas kürzer aber ohne Hilfsvariable kommt man wohl nicht aus.?
{ReadingsVal($name,"windDirectionText","leer") =~ s/E/O/gr}
So funktionierts :)
Dir hat der r-Modifier gefehlt.
lg, Stefan
Zitat von: Icinger am 03 Januar 2022, 04:23:42
{ReadingsVal($name,"windDirectionText","leer") =~ s/E/O/gr}
So funktionierts :)
Dir hat der r-Modifier gefehlt.
lg, Stefan
Super - danke, genau das habe ich gesucht und wohl immer wieder überlesen.
Zitatr Return the modified string and leave the original string untouched.
Gruß Jens