Variablen Wert aus String extrahieren

Begonnen von juemuc, 24 Dezember 2022, 15:39:39

Vorheriges Thema - Nächstes Thema

juemuc

Hallo zusammen,
ich benötige kurz Eure Hilfe.
Wie kann ich aus dem String "1h: -0.4 2h: +0.5 3h: +0.5 6h: +0.0" den Wert nach 3h bzw den Wert nach 6h extrahieren. Mit "replace(/1h:\s+(.*?)\s+2h:.*/, '$1')" kann ich den Wert nach 1h: ermitteln. Beim Rest scheitere ich   :-[

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

DeeSPe

Mit RegEx kein Problem.
{
  my $time = '1h: -0.4 2h: +0.5 3h: +0.5 6h: +0.0';
  my $time3h;
  my $time6h;
  if ($time =~ /^1h:.[+-]\d{1,2}\.\d.2h:.[+-]\d{1,2}\.\d.3h:.([+-]\d{1,2}\.\d).6h:.([+-]\d{1,2}\.\d)$/x)
  {
    $time3h = $1;
    $time6h = $2;
  }
}


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

Alternativ:
Mit split den String an den Leerzeichen zerlegen und in einer Arrayvariablen "festhalten".
Danach mit dem Zugriffsoperator auf die gewünschten Elemente zugreifen.

betateilchen

#3
Zitat von: DeeSPe am 24 Dezember 2022, 16:06:21
Mit RegEx kein Problem.

Der Sinn der if-Abfrage in Deinem Beispiel erschließt sich mir nicht?


sub test {
  my $time = '1h: -0.4 2h: +0.5 3h: +0.5 6h: +0.0';
  $time =~ /^1h:.[+-]\d{1,2}\.\d.2h:.[+-]\d{1,2}\.\d.3h:.([+-]\d{1,2}\.\d).6h:.([+-]\d{1,2}\.\d)$/x;
# return ($1,$2); # alternativ, wenn man nur die Rückgabewerte braucht
  my ($time3h,$time6h) = ($1, $2);
  return;
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DeeSPe

Zitat von: betateilchen am 24 Dezember 2022, 19:33:19
Der Sinn der if-Abfrage in Deinem Beispiel erschließt sich mir nicht?

Ich nutze dieses Konstrukt gern um dann evtl. in einem else-Zweig Ausgaben zu tätigen dass die Daten nicht im erwarteten Format bereit stehen.
Das ist aber natürlich für die Zuweisung nicht nötig.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

juemuc

Danke für Eure Tipps. Es gab unter FTUI3 mit dem Pipe-Befehl "part" noch eine elegantere Lösung.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).