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?
Du musst den senkrechten Strich escapen damit er im Regex als normales Zeichen gewertet wird:
@array=split(/\|/,$var);
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"
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