Hilfe, wie kann man regex für Substitution erweitern

Begonnen von Nobby1805, 04 November 2020, 17:18:25

Vorheriges Thema - Nächstes Thema

Nobby1805

Hallo,
für eine Umwandlung einer Zahl bei eine data-type label verwende ich ein data-substitution um Tausendertrennung einzufügen.
den regex-String s/(\d)(?=(\d\d\d)+(?!\d))/$1,/g habe ich irgendwo, evt. sogar hier im Forum, gefunden und geklaut  8)

Jetzt kommt mein Problem: das ursprüngliche Reading hat normalerweise eine Nachkommastelle, die aber mit 10% Wahrscheinlichkeit Null ist und dann weggelassen ist :( ich habe schon diverse Versuche gemacht den regex zu erweitern, kriege es aber nicht hin.

Wer kann mir helfen?

Danke schon einmal, Nobby
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

betateilchen

Das ist doch ein Thema, das sich über die localize Funktionen von perl lösen lassen muss und nicht per regex?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Nobby1805

Jetzt hast du das eine ? in meinem Kopf durch ein anderes ersetzt ::)  :-[
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

MKeY

ich steh n bissl aufm Schlauch, kannst du mal 2-3 Beispiele bringen?  ^^
Wer Fehler findet, darf sie behalten!
RPi's, D1Mini
Homematic, Hue, Sonoff, Alexa, Xiaomi, ConBee
Prusa MK2.5, Prusa MK3S (MMU2S vorhanden, aber nervtötend)
Lowrider 2CNC

Nobby1805

#4
Meinst du solche Beispiele?
123456.7 wird durch Substitution 123,456.7
1234567 wird 1,234,567 soll aber 1,234,567.0 sein

Damit die Werte in einer Tabelle schöner untereinander stehen
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

Nobby1805

Da ich mich heute wieder über die Darstellung geärgert habe und dann beim googeln meinen eigenen post gefunden habe ...

Kann mir da niemand helfen?

PS allen die besten Wünsche für ein gesundes Jahr 2022 !!
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

yersinia

#6
Für ein tausender-Trennzeichen und das ersetzen des Dezimalpunkts durch ein -komma nutze ich diese sub in der myutils:
sub tausender {
  my $zahl = shift;
  my $text = reverse $zahl;
  $text =~ s/\./\,/g;  #replace decimal point by decimal comma
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
  return scalar reverse $text;
}

Für feste Nachkommastellen kannst du zB sprintf nutzen:
sprintf("%.1f", $number);

Das ganze kann man zusammen aufrufen:
tausender(sprintf("%.1f", ReadingsNum(device,reading,0)))



Edit: ich lese gerade, dass es um FTUI geht. Mein Vorschlag kann dann nur mit einem userReading in FHEM funktionieren.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl