FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: JensS am 02 Januar 2022, 16:00:42

Titel: Zeichen ersetzen - Kurzform
Beitrag von: JensS am 02 Januar 2022, 16:00:42
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
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag von: frober am 02 Januar 2022, 17:51:53
Willst du nur das Reading auf deutsch oder auch den Inhalt?
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag von: JensS am 02 Januar 2022, 18:59:22
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}
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag 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..

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")}}
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag von: Benni am 02 Januar 2022, 20:09:19
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#
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag von: frober am 02 Januar 2022, 20:16:03
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. ::)
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag von: JensS am 02 Januar 2022, 22:19:33
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.?
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag 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
Titel: Antw:Zeichen ersetzen - Kurzform
Beitrag von: JensS am 03 Januar 2022, 06:00:51
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