Guten Morgen,
ich nutze nun auch SYSMON und möchte Werte daraus in meinem FTUI darstellen.
Dazu zerlege ich "Total: 909.63 MB, Used: 279.62 MB, 30.74 %, Free: 111.61 MB" und speiche das ergänzte Ergebnis in einem Userreadings.
ram_free:ram:.* {"Von ".(split / /,(split /: /, (split /, /, ReadingsVal($name,'ram',0))[0])[1])[0]." MB sind noch ".(split /: /, (split /, /, ReadingsVal($name,'ram',0))[3])[1]." frei.";;}
Das funktioniert auch alles.
Ich möchte aber nun aus den MBs GBs machen und die erste Zahl durch 1000 teilen und runden.
Und daran scheitere ich. Die 909,63 sind ein String und müssten eigentlich erst gewandelt werden. Richtig?
Wie aber funktioniert das?
Oder sollte ich den Wert zwischenspeichern?
Danke
Ist nicht in perl alles ein String?
Komma durch Punkt ersetzen und dann könnte es mit der Division klappen.
Zitat von: rabehd am 22 Februar 2023, 13:09:20
Komma durch Punkt ersetzen und dann könnte es mit der Division klappen.
Das wäre natürlich eine Möglichkeit. Probiere ich nachher gleich aus.
Danke
Nein. Mein Fehler.
Da ist ein Punkt. Ich habe das Komma fälschlicherweise hingezaubert.
2023.02.22 13:44:48 3: eval: {"Von ".(split / /,(split /: /, (split /, /, ReadingsVal($name,'ram',0))[0])[1])[0]/1000." GB sind noch ".(split /: /, (split /, /, ReadingsVal($name,'ram',0))[3])[1]." frei.";;}
2023.02.22 13:44:48 1: Error evaluating sysmon userReading ram_free: syntax error at (eval 358146) line 1, near "1000." GB sind noch ""
Das findet man im Log wenn ich versuche zu teilen (aber kein Hinweis wg. String)
Römi
my $text = "Total: 909.63 MB, Used: 279.62 MB, 30.74 %, Free: 111.61 MB";
my ($von,$belegt,$prozent,$frei) = $text=~m/([\d.]+)+/g;
$von/=1000; $frei/=1000;
return "Von $von GB sind $frei GB frei.";
Edit: das mit dem gewünschten Runden hatte ich übersehen, aber das geht genau so einfach.
Einfach die Rückgabezeile ersetzen durch:
return sprintf("Von %.2f GB sind %.2f GB frei.",$von,$frei);
--
my ($von,$belegt,$prozent,$frei) = $text=~m/([\d.]+)+/g;
Das muss ich für mich noch analysieren und verstehen ... aber das Ergebnis passt nun.
Ich Danke Euch!!!!
Römi
Zitat von: roemi am 22 Februar 2023, 15:55:23
Das muss ich für mich noch analysieren und verstehen
Das ist schnell erklärt.
Die regexp m/([\d.]+)+/g extrahiert alle numerischen Inhalte aus $text und weist die vier Ergebnisse den vier Variablen zu.
Die numerischen Inhalte werden als Gruppe - eingeschlossen in Klammer() - daran erkannt, dass nur Ziffern \d und Punkte . vorkommen.
Solch einen Codeblock würde ich übrigens immer in eine Funktion in der 99_myUtils.pm packen und nicht direkt in das userReading.
Dadurch wird das Ganze sehr viel übersichtlicher, nachvollziehbarer und leichter wartbar.
--
ZitatDas ist schnell erklärt.
Und ich zerleg das Teil in 1000 Teile und bin auch noch hochzufrieden mit mir 8)
Danke Dir
Römi