Autor Thema: Zeichen ersetzen - Kurzform  (Gelesen 2617 mal)

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1099
Zeichen ersetzen - Kurzform
« 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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, 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.

Offline frober

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 1115
  • Was man nicht kann, kann man lernen...
Antw:Zeichen ersetzen - Kurzform
« Antwort #1 am: 02 Januar 2022, 17:51:53 »
Willst du nur das Reading auf deutsch oder auch den Inhalt?
Raspi 3b mit Raspbian Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1099
Antw:Zeichen ersetzen - Kurzform
« Antwort #2 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}
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, 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.

Offline frober

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 1115
  • Was man nicht kann, kann man lernen...
Antw:Zeichen ersetzen - Kurzform
« Antwort #3 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")}}
Raspi 3b mit Raspbian Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...
Gefällt mir Gefällt mir x 1 Informativ Informativ x 1 Liste anzeigen

Offline Benni

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2437
  • FHEMinist
Antw:Zeichen ersetzen - Kurzform
« Antwort #4 am: 02 Januar 2022, 20:09:19 »
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#
« Letzte Änderung: 02 Januar 2022, 21:07:45 von Benni »

Offline frober

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 1115
  • Was man nicht kann, kann man lernen...
Antw:Zeichen ersetzen - Kurzform
« Antwort #5 am: 02 Januar 2022, 20:16:03 »

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 Stretch und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1099
Antw:Zeichen ersetzen - Kurzform
« Antwort #6 am: 02 Januar 2022, 22:19:33 »
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.?
« Letzte Änderung: 02 Januar 2022, 22:34:29 von JensS »
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, 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.

Offline Icinger

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1420
Antw:Zeichen ersetzen - Kurzform
« Antwort #7 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
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho
Hilfreich Hilfreich x 1 Liste anzeigen

Offline JensS

  • Hero Member
  • *****
  • Beiträge: 1099
Antw:Zeichen ersetzen - Kurzform
« Antwort #8 am: 03 Januar 2022, 06:00:51 »
{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.
Zitat
r   Return the modified string and leave the original string untouched.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, AB440S, AB440R, 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.