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
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
Alternativ:
Mit split (http://www.mathe2.uni-bayreuth.de/perl/GK/regExp.htm#splitundjoin) den String an den Leerzeichen zerlegen und in einer Arrayvariablen "festhalten".
Danach mit dem Zugriffsoperator (http://www.mathe2.uni-bayreuth.de/perl/GK/arrays.htm#Zugriffsoperator) auf die gewünschten Elemente zugreifen.
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;
}
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
Danke für die Erklärung.
Danke für Eure Tipps. Es gab unter FTUI3 mit dem Pipe-Befehl "part" noch eine elegantere Lösung.
Viele Grüße
Jürgen