[beantwortet] Regex und substitute Frage

Begonnen von andies, 23 Oktober 2020, 08:46:37

Vorheriges Thema - Nächstes Thema

andies

Ich benötige mal Hilfe. Ich habe ein längeres Ergebnis aus einem Signalduino-Event, das in etwa so aussieht
MU;P0=-15056;P1=297;P2=-385;P3=168;P4=-726;P6=608;CP=1;R=242;D=3432643432143014141412641414126414126410141414126414141264141264101414141264141412641412641014141412641414126414126410141414126414141264141264101414141264141412641412641014141412641414126414126410141414126414141264141264101414141264;p;i
Das möchte ich gern in einem Logfile speichern, um es später auszuwerten. Dazu müssen die Semikola/ons verschwinden. Das gelingt mir, Gleichzeitig möchte ich den Rattenschwanz "D=1234..." entfernen. Das gelingt mir nicht, vielmehr entsteht
|M|U|||P|0|=|-|1|5|0|5|6|||P|1|=|2|9|7|||P|2|=|-|3|8|5|||P|3|=|1|6|8|||P|4|=|-|7|2|6|||P|6|=|6|0|8|||C|P|=|1|||R|=|2|4|2|||D|=|3|4|3|2|6|4|3|4|3|2|1|4|3|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|1|4|1|4|1|2|6|4|1|4|1|2|6|4|1|0|1|4|1|4|1|4|1|2|6|4|||p|||i|||
In meiner 99_myUtils lautet der Befehl
sub SemikolonWeg($) {
  my $Wert = $_[0];
  $Wert =~ s/;/|/g;
  $Wert =~ s/|D=[0..9]+|/|/;
  return $Wert;
}

und hier muss ein Fehler sein, den ich nicht sehe. Hat da jemand einen Tipp?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Wernieman

Dein Problem dürfte sein, das | in der Regex ein "Spezielles Zeichen ist.

Mach es deshalb doch umgekehrt. Erst das D= entfernen und dann ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

andies

Na dann mache ich das anders und nehme als Trennzeichen einfach - statt |. Aber ich hatte geschaut und nicht gesehen, dass das ein Sonderzeichen war. Ich probiere mal, danke.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

frank

oder sonderzeichen in der regex mit backslash escapen: "\|"
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

andies

FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Wernieman

Wobei generell:
Ich würde zuerst immer versuchen, die Eingabe zu kürzen und dann erst Änderungen. Insofern ist das Wegschneiden zuerst und dann das Vertauschen in der Reihenfolge besser.

Hintergrund:
Je kürzer die Eingabe, desto schneller kann sie verarbeitet werden.

In diesem Falle, von der Länge her, nicht so relevant, man sollte sich nur so einen Programmierstiel angewöhnen ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html