FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Torsten_MG am 18 Januar 2018, 12:22:19

Titel: Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: Torsten_MG am 18 Januar 2018, 12:22:19
Hallo Leute,

ich habe folgendes Reading:

DasErste_details-1

mit dem Eintrag:
Nachrichten, D 2018<br/>Laufzeit: 15 Minuten<br/>Original-Titel: Tagesschau<br/><br/>Die Nachrichten der ARD produziert in HD.<br/>

Nun möchte ich, daß das Reading so aufgelöst wird, das jeder Text vor dem <br/> separat für sich in ein neues reading kommt. Ich habe keine Erfahrung damit und habe durch suchen im Forum die möglichkeit mit dem split gefunden. Bekomme es aber leider nicht hin.
Hier mein letzter Versuch:
ARD_details {(split /<br/>/,ReadingsVal("TV-Programme","DasErste_details-1",""))[0]}

Als Ergebnis bekomme ich:
Error evaluating TV_Programme userReading ARD_details: Search pattern not terminated at (eval 364) line 1.

Leider komme ich damit nicht weiter. Ich hoffe mir kann da jemand weiterhelfen.
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: Torsten_MG am 18 Januar 2018, 12:45:26
Ich habe jetzt nochmal 2 Sachen ausprobiert dabei kommt folgendes raus:

Zuerst:
ARD_details {split(/br/,ReadingsVal("TV-Programme","DasErste_details-1",""))[0]}

Dann erscheint der Text:
Error evaluating TV_Programme userReading ARD_details: syntax error at (eval 324) line 1, near ")["

Dann habe ich es wie folgt abgeändert:
ARD_details {split(/br/,ReadingsVal("TV-Programme","DasErste_details-1","")),[0]}

Dann kommt der Text:
ARRAY(0x2f238d8)
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: OdfFhem am 18 Januar 2018, 13:14:45
Die Aufsplittung gelingt mit folgendem regulären Ausdruck:

(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>

Anschließend stehen die einzelnen Teile in $1...$5 zur Verfügung.

Will man direkt nur den dritten Teil, kann man folgende Variante verwenden:

.*<br/>.*<br/>(.*)<br/>.*<br/>.*<br/>



Unter Verwendung von split hilft folgendes vielleicht weiter:

my @parts = split('<br/>',"Nachrichten, D 2018<br/>Laufzeit: 15 Minuten<br/>Original-Titel: Tagesschau<br/><br/>Die Nachrichten der ARD produziert in HD.<br/>");
return scalar(@parts)." --- ".@parts[2];

Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: Torsten_MG am 18 Januar 2018, 13:23:14
@OdfFhem

leider komme ich mit deiner Ausführung nicht klar.

Wie setze ich diesen Code ein?
(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: CBSnake am 18 Januar 2018, 13:33:17
Hi,

hier mal meine quick`n`dirty Lösung:

geteilt0 {[split("<br/>", ReadingsVal("$name","DasErste_details-1",""))]->[0]}, geteilt1 {[split("<br/>", ReadingsVal("$name","DasErste_details-1",""))]->[1]}, geteilt2 {[split("<br/>", ReadingsVal("$name","DasErste_details-1",""))]->[2]}, geteilt3 {[split("<br/>", ReadingsVal("$name","DasErste_details-1",""))]->[3]}, geteilt4 {[split("<br/>", ReadingsVal("$name","DasErste_details-1",""))]->[4]}

Ich mach das auch immer über try`n`error :-) und durch copy`n`past meiner schon funktionierenden Lösungen :-)

Das geteilt3 könnte man auch weg lassen, ist ja quasi leer

Grüße
Achim
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: OdfFhem am 18 Januar 2018, 13:38:46
Den regulären Ausdruck könnte man z.B. folgendermaßen verwenden:


my $details = "Nachrichten, D 2018<br/>Laufzeit: 15 Minuten<br/>Original-Titel: Tagesschau<br/><br/>Die Nachrichten der ARD produziert in HD.<br/>";
$details =~ "(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>*";
return $3;
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: Torsten_MG am 18 Januar 2018, 14:00:29
@CBSnake

wenn ich deinen Code in mein userreading packe, dann erscheint leider nichts und im log tauchen diese Meldungen auf
2018.01.18 13:46:58 1: PERL WARNING: TV_Programme userReadings geteilt0 evaluated to undef at fhem.pl line 4332.
2018.01.18 13:46:58 3: eval: {[split("<br/>", ReadingsVal("TV-Programme","DasErste_details-1",""))]->[0]}
2018.01.18 13:46:58 1: PERL WARNING: TV_Programme userReadings geteilt1 evaluated to undef at fhem.pl line 4332.
2018.01.18 13:46:58 3: eval: {[split("<br/>", ReadingsVal("TV-Programme","DasErste_details-1",""))]->[1]}
2018.01.18 13:46:58 1: PERL WARNING: TV_Programme userReadings geteilt2 evaluated to undef at fhem.pl line 4332.
2018.01.18 13:46:58 3: eval: {[split("<br/>", ReadingsVal("TV-Programme","DasErste_details-1",""))]->[2]}
2018.01.18 13:46:58 1: PERL WARNING: TV_Programme userReadings geteilt3 evaluated to undef at fhem.pl line 4332.
2018.01.18 13:46:58 3: eval: {[split("<br/>", ReadingsVal("TV-Programme","DasErste_details-1",""))]->[3]}
2018.01.18 13:46:58 1: PERL WARNING: TV_Programme userReadings geteilt4 evaluated to undef at fhem.pl line 4332.
2018.01.18 13:46:58 3: eval: {[split("<br/>", ReadingsVal("TV-Programme","DasErste_details-1",""))]->[4]}


@ OdfFhem

das, was du in der ersten Zeile in den "" geschrieben hast, ist ja der Inhalt des Readings DasErste_details-1.

wie setze ich den Code ein, ist leider alles noch recht neu für mich
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: OdfFhem am 18 Januar 2018, 14:13:15
Da ich das passende Device nicht habe, habe ich den zu verwendenden Wert einfach mal als Konstante umfunktioniert.

Im echten Code sollte natürlich folgendes stehen:

my $details = ReadingsVal("TV-Programme","DasErste_details-1","");
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: CBSnake am 18 Januar 2018, 14:17:44
hmm komisch,

ich hab den eben nochmal hier raus ins  Attr Userreadings kopiert klappt noch, hattest was verändert oder noch weitere Sachen im Userreading stehen?
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: Torsten_MG am 18 Januar 2018, 14:21:52
@CBSnake

Danke funktioniert jetzt, war wohl noch ein Fehler beim übertragen gewesen, vielen Dank!

@ OdfFhem

da die Version von CBSnake funktioniert, werde ich diese Lösung nehmen. Danke für deine Geduld!
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: CBSnake am 18 Januar 2018, 15:41:30
Die Herangehensweise von @OdfFhem finde ich auch interessant. Nur wie geht es dann weiter, für Perl-fremde? Wie bekomme ich die $1-$5 Variablen in Readings? Man findet zwar überall Perl-Beispiele im Netz, die aber nicht 1zu1 in Fhem übertragbar sind. Userreadings wird nur fast immer mit siehe Beispiele, siehe Suche beschrieben und da wird dann wieder mit Perl um sich geworfen und mehr als kopieren bleibt einem nicht :-)

Grüße
Achim
Titel: Antw:Brauche Hilfe beim zerlegen von einem Reading
Beitrag von: OdfFhem am 18 Januar 2018, 16:45:07
Ein Beispiel für geteilt0 könnte z.B. so aussehen:


geteilt0 { my $details = ReadingsVal("$name","DasErste_details-1","");; $details =~ "(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>(.*)<br/>*";; $1}