Moin
ich habe folgendes Reading :
t_001_bdate 02.08.2018 2018-07-28 12:50:54
ich möchte gerne daraus ein neues Reading machen und zwar ungefähr so:
t_001_bdate_neu 02.08. 2018-07-28 12:50:54
ich habe das mit
attr v_Geburt userReadings t_001_bdate_neu { my @c = split '.',ReadingsVal($name,'t_001_bdate',0);join(' ', $c[0], $c[1]) }
versucht, doch leider kommt nur ein leeres Reading dabei raus.
Ich habe schon gefühlte tausend Sachen gelesen aber als Anfänger verstehe ich nur Bahnhof.
Könnte mir bitte jemand erklären was ich machen muss um die Jahreszahl wegzubekommen.
Danke
Gruß Peter
Moin.
Zunächst: Bitte benutze CodeTags (das # im Editor)
Zu Deinem Problem:Du könntest es z.B. mit "substr" versuchen
http://www.hidemail.de/blog/substr-perl.shtml (http://www.hidemail.de/blog/substr-perl.shtml)
Hoffe das hilft Dir.
Cheers
mi.ke
Erstmal Danke für deine Antwort. Die Seite habe ich auch schon öfters gefunden, aber als Anfänger verstehe ich nicht wie ich das in mein userreading umsetzten soll.
Gruß Peter
Bin mir nicht ganz sicher, aber sollte es nicht my $c heißen und nicht @c ?
Der Rest sieht nämlich eigentlich gut aus.
Wenn ich das in $c ändere , funktioniert es überhaupt nicht mehr.
Zitat von: Octopus180 am 28 Juli 2018, 13:26:11
Moin
ich habe folgendes Reading :
t_001_bdate 02.08.2018 2018-07-28 12:50:54
ich möchte gerne daraus ein neues Reading machen und zwar ungefähr so:
t_001_bdate_neu 02.08. 2018-07-28 12:50:54
ich habe das mit
attr v_Geburt userReadings t_001_bdate_neu { my @c = split '.',ReadingsVal($name,'t_001_bdate',0);join(' ', $c[0], $c[1]) }
versucht, doch leider kommt nur ein leeres Reading dabei raus.
Ich habe schon gefühlte tausend Sachen gelesen aber als Anfänger verstehe ich nur Bahnhof.
Könnte mir bitte jemand erklären was ich machen muss um die Jahreszahl wegzubekommen.
Danke
Gruß Peter
t_001_bdate_neu { substr(ReadingsVal("$name","state","0"),0,5) }
maskiere den punkt beim splittrennzeichen mit backslash.
Und warum nicht mit einem regulären Ausdruck ?
{my $s=ReadingsVal($name,'t_001_bdate',0);;$s =~ s/201\d//;;$s=~s/date/date_neu/;;$s}
LG
pah
In Antwort5 von Byte09 steht es doch schon richtig drin. Nur müsste es , glaube ich, ,6 heißen, sonst fehlt der Punkt hinter dem Monat.
Moin
wenn ich das so eingebe wie von Byte09 geschrieben kommt das Reading raus:
t_001_bdate_neu t: 10 2018-07-28 18:21:52
auch wenn ich aus der 5 eine 6 mache.
Gruß
Hi,
naja ganz genau so darfst Du es nicht machen, Byte09 hat den state genommen, Du hast ein Reading!
Gruß Otto
Zitat von: Octopus180 am 28 Juli 2018, 18:24:46
Moin
wenn ich das so eingebe wie von Byte09 geschrieben kommt das Reading raus:
t_001_bdate_neu t: 10 2018-07-28 18:21:52
auch wenn ich aus der 5 eine 6 mache.
Gruß
weil dein reading nicht 'state' heisst, sondern 't_001_bdate' ! ... das musst du ändern , ich hatte das reading nur nicht zum probieren.
bitte nicht 'blind' copy & paste , sondern auch mal drüberschauen .
gruss Byte09
Hallo Octopus180,
und dein Konstrukt läuft auch, wenn Du die Antwort von frank berücksichtigst
'.' -> '\.'
::)
Erstmal Danke an alle, es funktioniert jetzt.
Ja , Byte09 , du hast recht natürlich sollte man nochmal rüber schauen. Aber als Anfänger ist es manchmal schwer zu Verstehen wie sich sowas zusammen setzt und was wie zusammen gehört.
Deine Lösung hat jetzt funktioniert, nachdem ich das ,,State" geändert habe.
Meine Lösung funktioniert leider nicht ganz, das Reading wird erzeugt aber es fehlen die Punkte zwischen den Zahlen.
Aber das ist ja nicht weiter schlimm, da ja Byte09 Lösung funktioniert.
Gruß Peter
Wenn Du bei Dir im join den Punkt vorgibst und keinen leeren String, funktioniert auch Deine Lösung.
Stimmt, aber dann ist nur zwischen Tag und Monat einen Punkt aber nicht hinterm Monat
Die Copy&Paste (ohne Kopf dazwischen) Variante :D
attr v_Geburt userReadings t_001_bdate_neu { my @c = split '\.',ReadingsVal($name,'t_001_bdate',0);;join('.', $c[0], $c[1]).'.'}
einfach mit Verkettung ein Punkt angehangen
Gruß Otto
hallo otto,
mach mal aus dem vorletzten punkt noch ein komma.
naja ich bin nicht so der Spezi und habe alles durchprobiert, so wie es dasteht geht es. Wenn ich Deinen Vorschlag mache dann ist das Resultat nur ein .
Mann kann sowas machen $c[1],'.')} - dann werden es aber zwei Punkte :D
sorry otto,
ich hatte tomaten auf den augen. :(
ZitatMann kann sowas machen $c[1],'.')} - dann werden es aber zwei Punkte :D
genau das hatte ich im sinn, da ich die klammer nicht gesehen habe.