FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: andies am 23 Oktober 2020, 08:46:37

Titel: [beantwortet] Regex und substitute Frage
Beitrag von: andies am 23 Oktober 2020, 08:46:37
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?
Titel: Antw:Regex und substitute Frage
Beitrag von: Wernieman am 23 Oktober 2020, 09:09:52
Dein Problem dürfte sein, das | in der Regex ein "Spezielles Zeichen ist.

Mach es deshalb doch umgekehrt. Erst das D= entfernen und dann ....
Titel: Antw:Regex und substitute Frage
Beitrag von: andies am 23 Oktober 2020, 09:14:44
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.
Titel: Antw:Regex und substitute Frage
Beitrag von: frank am 23 Oktober 2020, 10:17:41
oder sonderzeichen in der regex mit backslash escapen: "\|"
Titel: Antw:Regex und substitute Frage
Beitrag von: andies am 23 Oktober 2020, 11:03:42
Klappt, danke.
Titel: Antw:[beantwortet] Regex und substitute Frage
Beitrag von: Wernieman am 23 Oktober 2020, 11:11:05
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 ....