Ich teste jetzt schon seit einer Stunde an einer regex um den numerischen Teil eines Readings vom alphanumerischen "abzuschneiden"
Beispiel: Reading ist name:Ziffer
wie kann ich daraus nur auf "Ziffer" matchen?
/\d/ geht nicht genau wie /[0-9]/ und dann bleibt auch noch :
ist auch schon spät, vlt. morgen noch einmal in Ruhe angehen, mache jetzt sowie so nicht weiter
Falls jemand die Antwort parat hat, gerne
VG
Frank
\d und [0-9] sollte beides gehen. zeig mal was du genau machst.
gruss
andre
Hallo Andre, jetzt hast du mich kurz vor dem Bett erwischt :)
my $batt = ReadingsVal("ActionDetector","state","undef");
my @daten = split(/[0-9]/,$batt);
my $alive = $daten[0];
#my $dead = $daten[];
#my $unkn = $daten[];
#my $off = $daten[];
fhem "setreading Batt_Level alive $alive";
Im state steht: state alive:43 dead:0 unkn:0 off:0
VG
Frank
wenn du an den zahlen splittest werden sie ja entfernt und der rest wandert in das array. da ist genau das gegenteil von dem was du willst.
du kannst an /[: ]/ (doppelpunkt und leerzeichen) splitten und jedes zweite element verwenden. dann hat du auch noch die beschreibungen in den geraden Indizes.
vielleicht geht aus splitten an [^\d]. also splitten an allem was nicht zahl ist. da sollten auch die zahlen in deinem array übrig bleiben.
oder du nimmst etwas in der art: $batt =~ m/(\d*)[^\d]*(\d*)[^\d]*(\d*)[^\d]*(\d*)/
und hast dann die zahlen in $1-$4
ich denke die erste variante ist am besten.
gruss
andre
Danke Andre, mit
my @daten = split(/[^\d]./,$batt);
habe ich das erwünschte Ergebnis!
Vielen Dank
Frank