FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TomLee am 07 Juni 2020, 18:56:01

Titel: Frage zur Funktion substr()
Beitrag von: TomLee am 07 Juni 2020, 18:56:01
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.

Titel: Antw:Frage zur Funktion substr()
Beitrag von: Wzut am 07 Juni 2020, 19:28:46
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";

Titel: Antw:Frage zur Funktion substr()
Beitrag von: TomLee am 07 Juni 2020, 20:19:34
Danke, mit großem Aufwand war if gemeint, ich werds dann wohl so machen. :P
Titel: Antw:Frage zur Funktion substr()
Beitrag von: TomLee am 10 Juni 2020, 18:36:49
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

Titel: Antw:Frage zur Funktion substr()
Beitrag von: Wzut am 10 Juni 2020, 19:08:02
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.
Titel: Antw:Frage zur Funktion substr()
Beitrag von: TomLee am 10 Juni 2020, 19:26:19
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 ?
Titel: Antw:Frage zur Funktion substr()
Beitrag von: Wzut am 10 Juni 2020, 19:58:10
was soll print oder say in der 99_myUtils ?
Titel: Antw:Frage zur Funktion substr()
Beitrag von: TomLee am 10 Juni 2020, 20:19:48
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.

Titel: Antw:Frage zur Funktion substr()
Beitrag von: Beta-User am 11 Juni 2020, 06:36:15
?
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 ;) )