FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: franky08 am 13 März 2015, 19:40:29

Titel: [gelöst] Bräuchte Hilfe bei sub
Beitrag von: franky08 am 13 März 2015, 19:40:29
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
Titel: Antw:Bräuchte Hilfe bei sub
Beitrag von: vbs am 13 März 2015, 19:43:59
Du springst ja sofort beim ersten Durchlauf mit return aus der Schleife raus. Soll das so?
Titel: Antw:Bräuchte Hilfe bei sub
Beitrag von: betateilchen am 13 März 2015, 19:47:37
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
Titel: Antw:Bräuchte Hilfe bei sub
Beitrag von: franky08 am 13 März 2015, 20:10:01
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
Titel: Antw:[gelöst] Bräuchte Hilfe bei sub
Beitrag von: betateilchen am 13 März 2015, 20:16:00
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";
}