FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Pi_01 am 02 August 2020, 14:25:02

Titel: Reading enthält mehrere Werte
Beitrag von: Pi_01 am 02 August 2020, 14:25:02
Hallo,
ich habe ein Reading im folgenden Format vorliegen:

2020-08-02 14:14:43|20544

Wie kann ich innerhalb der Datei 99_myUtils.pm auf den ersten ("2020-08-02 14:14:43") und zweiten ("20544") Wert zugreifen?

Mit dem PERL-Code

my $var = ReadingsVal("meineRep","SqlResultRow_2","nothing");

erhalte ich den vollständigen "String"

2020-08-02 14:14:43|20544

zurück.

Ich dachte mit

@array=split(/|/,$var);

könnte ich die zwei Werte in zwei verschieden Variablen speichern. Das geht aber nicht.

Wo liegt der Fehler?
Titel: Antw:Reading enthält mehrere Werte
Beitrag von: DS_Starter am 02 August 2020, 14:33:53
Du musst den senkrechten Strich escapen damit er im Regex als normales Zeichen gewertet wird:

@array=split(/\|/,$var);
Titel: Antw:Reading enthält mehrere Werte
Beitrag von: Pi_01 am 02 August 2020, 15:57:46
oh mann, dass das |-Zeichen auch escapt werden muss, daran hätte ich nie gedacht.
Danke DS_Starter.

Abschließend noch eine Frage (ich möchte deswegen nicht extra einen neuen Thread aufmachen):

Wie kann man in PERL mit Datum arbeiten?
Ich habe das Format 2020-08-02 14:14:43 vorliegen und möchte prüfen: "nach 12 Uhr und vor 14 Uhr"
Titel: Antw:Reading enthält mehrere Werte
Beitrag von: DS_Starter am 02 August 2020, 16:39:02
Zitatoh mann, dass das |-Zeichen auch escapt werden muss, daran hätte ich nie gedacht.
Ja, sonst wird | in einem Regex als "oder" Bedingung verwendet.

ZitatIch habe das Format 2020-08-02 14:14:43 vorliegen und möchte prüfen: "nach 12 Uhr und vor 14 Uhr"
Es gibt wie immer viele Möglichkeiten. Hier eine auf die Schnelle ohne Anspruch auf Fehlerfreiheit.
Nehmen wir an du hast:

$dt = "2020-08-02 14:14:43";

Dann kannst du anwenden:

my ($h) = $dt =~ /\s([0-9]*?):/;

In $h steht in dem Beispiel dann "14". Damit kannst du weitermachen.
Alternativ kannst du natürlich wieder splitten oder auch mit substr arbeiten.

Grüße,
Heiko