[gelöst] Bräuchte Hilfe bei sub

Begonnen von franky08, 13 März 2015, 19:40:29

Vorheriges Thema - Nächstes Thema

franky08

Hallo, habe mir folgende sub erstellt um aus einem Statistic Reading (Gas-Sensor) die einzelnen Werte rauszuschreiben.

sub Gas_split

{

my $gsp = ReadingsVal("Gas_Sensor","statGasCnt","0");
my @gsp = split /[:,\s\/]+/, $gsp;

foreach(@gsp) {
return "$_\n";

}

}


my $gsp = ReadingsVal("Gas_Sensor","statGasCnt","0") liefert: Hour: 0.22 Day: 2.07 Month: 2.07 Year: 2.07 (since: 2015-03-13_12:54:55 )
Aus dem Ausdruck brauche ich die einzelnen Werte von Stunde, Tag, Monat und Jahr in der Form $h,$D,$M und $Y

Da komme ich jetzt nicht so richtig vorwärts, die foreach Schleife liefert leider auch nur den 1.Teil vom Ausdruck zurück (Ausgabe: Hour)
Kann mir da bitte jemand einen Tip geben?

Siehe auch hier, aber das wurde schon OT, desshalb der neue Tread:
http://forum.fhem.de/index.php/topic,32827.msg273045.html#msg273045

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

vbs

Du springst ja sofort beim ersten Durchlauf mit return aus der Schleife raus. Soll das so?

betateilchen

Warum eigentlich so kompliziert?



sub test {

my $input = "Hour: 0.22 Day: 2.07 Month: 2.07 Year: 2.07 (since: 2015-03-13_12:54:55 )";

my @daten = split(/ /,$input);

my $h = $daten[1];
my $D = $daten[3];
my $M = $daten[5];
my $Y = $daten[7];

return "Stunde: $h Tag: $D Monat: $M Jahr: $Y";
}



liefert:


Stunde: 0.22 Tag: 2.07 Monat: 2.07 Jahr: 2.07
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Danke funktioniert. Warum die foreach nach dem ersten Durchlauf Abbricht lag natürlich am return. betateilchens Beispiel hat den Vorteil das ich sofort alle Strings so habe, wie ich sie brauche.

Vielen Dank

Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

das geht übrigens noch einfacher:


sub test {
my $input = "Hour: 0.22 Day: 2.07 Month: 2.07 Year: 2.07 (since: 2015-03-13_12:54:55 )";

my (undef,$h,undef,$D,undef,$M,undef,$Y,undef) = split(/ /,$input,9);

return "Stunde: $h Tag: $D Monat: $M Jahr: $Y";
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!