Zeichen ersetzen - Kurzform

Begonnen von JensS, 02 Januar 2022, 16:00:42

Vorheriges Thema - Nächstes Thema

JensS

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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

frober

Willst du nur das Reading auf deutsch oder auch den Inhalt?
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

JensS

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}
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

frober

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")}}
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Benni

#4
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#

frober

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. ::)
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

JensS

#6
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.?
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Icinger

{ReadingsVal($name,"windDirectionText","leer") =~ s/E/O/gr}

So funktionierts :)
Dir hat der r-Modifier gefehlt.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

JensS

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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.