Hallo,
möchte ein Reading auf 30 Zeichen begrenzen, das klappt auch mit:
(substr(ReadingsVal("devicename","readingname","no title"),0,32))
Das man erkennt das das Reading überlang war will ich dem Reading drei Punkte anhängen, aber nicht immer:
(substr(ReadingsVal("devicename","readingname","no title"),0,32)."...")
sondern nur wenn das Reading auch grösser x war.
Kann vielleicht substr das schon selbst ?
Gruß
Thomas
Sowas soll ja gehen :
$t="Mein Name ist Hase";
substr($t,14,4,"Wolf");
print $t;
Ausgabe:
Mein Name ist Wolf
Klappt aber nicht wie ich mir das gerne vorgestellt hätte mit regexp zu nutzen :
substr($t,14,.*,"...");
Hat jemand einen Tipp, ohne großen Aufwand das umzusetzen.
use strict;
my $kurz = "das ist nicht so lang";
my $lang = "und hier ist so ein Monster mit Überlänge";
sub trim30 { return length($_[0]) < 31 ? $_[0] : substr($_[0],0,27).'...'; }
print trim30($kurz)."\n";
print trim30($lang)."\n";
Danke, mit großem Aufwand war if gemeint, ich werds dann wohl so machen. :P
Ich kann kein Perl, aber etwas belesen bin ich, was mich interessiert, weshalb ich hier nie was von say lese ?
Wenn du schon use strict angibst warum nicht auch die Minimalversion ? und dann natürlich mind. use 5.010; weil ab da say geht.
Wenn ich say in FHEM verwenden will bekomm ich die Meldung Can't locate object method "say" via package ...
Ist das so in FHEM, gibts diese Minimalangabe überall wo ich in FHEM Perl verwenden kann nicht ?
Wär doch einfacher, wie umständlich noch ne neue Zeile anzuhängen ?
Gruß
Thomas
was ich dir da gepostet habe ist ein mini Perl Programm damit du die Funktion trim30 mal ausserhalb von FHEM auf die Schnelle testen kannst.
Innerhalb von FHEM wird i.d.R. weder print noch say usw. benutzt da Ausgaben in readings oder Logfiles etc. erfolgen.
Die Zeile
sub trim30 { return length($_[0]) < 31 ? $_[0] : substr($_[0],0,27).'...'; }
war gedacht als Erweiterung für deine 99_myUtils um einfach und jederzeit (userReadings, notify, ... ) deine langen Strings zu kürzen.
Zitatdamit du die Funktion trim30 mal ausserhalb von FHEM auf die Schnelle testen kannst
na genau darum bin ich ja auf meine Frage gekommen.
Eine Frage direkt, weitere 1-2 werden vermutlich noch folgen.
Kann ich die Minimalversion in der 99_myUtils angeben, sprich say nutzen ?
was soll print oder say in der 99_myUtils ?
Ich mag auch daneben liegen ->Verrenkungen die Beta-User hier in diesem Thread (https://forum.fhem.de/index.php/topic,111871.msg1061451.html#msg1061451) kurzeitig anstellt, Html-Code in stateformat zu vermeiden, einfacher zu gestalten, dann halt in einer 99_myUtils.
Und der Grund für kein bzw. weniger HTML in STATE sind User die einen Screenreader nutzen müssen.
?
War das mit "my $trim30 = sub {}" und hinterher "$trim30->..." statt des sub-Aufrufs nicht ok?
(Evtl. in anderen Punkten nicht funktionierende Vollversion: https://forum.fhem.de/index.php/topic,111711.msg1062906.html#msg1062906)
(Danach hattest du mal "Misch-Code" gezeigt, war wohl etwas viel gestern ;) )