CR im String suchen

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
BitMac
Beiträge: 183
Registriert: 27.11.2015, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 8 Mal

CR im String suchen

Beitrag von BitMac » 06.04.2021, 09:16

In einem HM_Script möchte ich einem String nach CR durchsuchen.
In der Form:
while (abfrage != "\\r") {
Doch das funktioniert so nicht.
Wie ist denn bloß die korrekte Syntax ?

Beste Grüße
Andreas

Benutzeravatar
Black
Beiträge: 5460
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 417 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: CR im String suchen

Beitrag von Black » 06.04.2021, 10:08

präzisiere doch mal die Programstellung. Du willst nur wissen, ob ein String s das carrigeRecurn enthält ?

das geht am einfachsten mit

Code: Alles auswählen

string s= "teststring\rhhhjjjjkkk";
if (s.Contains ("\r")) {WriteLine ("enthält ein carrigeReturn"); }
Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

BitMac
Beiträge: 183
Registriert: 27.11.2015, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 8 Mal

Re: CR im String suchen (gelöst)

Beitrag von BitMac » 06.04.2021, 13:46

Schönen Dank für die Info.
Hier die genaue Problemstellung:
Ich durchforste meine Kalenderdatei nach bestimmten Terminen.
Der Anfang des gesuchten Termins ist leicht zu finden.
Der nachfolgende gesuchte Substring kann unterschiedlich lang sein.
Das Einzige was ich weiß, ist das er mit CR aufhört.
Deswegen suche ich danach, damit ich die Länge des Substrings bestimmen kann.
Darum die while-Schleife.
Die Syntax war schon richtig, es musste nur \n statt \r sein,also
while (abfrage != "\n") {

Benutzeravatar
Roland M.
Beiträge: 9720
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 251 Mal
Danksagung erhalten: 1351 Mal

Re: CR im String suchen

Beitrag von Roland M. » 06.04.2021, 14:15

Hallo Andreas!
BitMac hat geschrieben:
06.04.2021, 13:46
Der Anfang des gesuchten Termins ist leicht zu finden.
Der nachfolgende gesuchte Substring kann unterschiedlich lang sein.
Das Einzige was ich weiß, ist das er mit CR aufhört.
var s = "abc\rxyz"; ! dein Kalendereintrag, bereits auf den Anfang gekürzt
var x = s.Find("\r");
var s1 = s.Substr(0,x);


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: CR im String suchen

Beitrag von dtp » 06.04.2021, 14:26

Achtung mit der while-Schleife. Die läuft ansonsten endlos durch, wenn du die im String gefunden "\r" nicht löscht bzw. keine entsprechenden Substrings erzeugst. Wobei "endlos" relativ ist. Irgendwann stoppt die ReGaHSS die auch von selbst. Trotzdem, wenn es ungünstig programmiert ist, kann das zum Absturz der CCU führen.

Ich füge daher in der Regel ein zusätzliches Abbruchkriterium in meine while-Schleifen ein.

Code: Alles auswählen

integer max = 50;
integer cnt = 0;
while((...) && (cnt <= max)){
  cnt = cnt + 1;
  ...
}
Das mit den Substrings kann etwas tricky sein, aber "\r" am Ende bekommst du ja auch gut mit .RTrim() weg.

Hier mal ein kleines Beispiel anhand eines Schnipsels aus meinem zPNP-Cmb:

Code: Alles auswählen

while(message.Find("<font color=") != -1){
  trcPos = message.Find("<font color=");
  messageTrc = message.Substr(trcPos, message.Length() - trcPos);
  trcLength = messageTrc.Find(">") + 1;
  message = message.Replace(message.Substr(trcPos, trcLength), "");
}
Da werden in einem String "message" alle HTML-Codetags gesucht, die mit "<font color=" beginnen, um dann den sich zwischen "<" und ">" befindenden Stringteil zu löschen. Vielleicht hilft dir das.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

alchy
Beiträge: 10744
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 671 Mal

Re: CR im String suchen

Beitrag von alchy » 06.04.2021, 22:07

dtp hat geschrieben:
06.04.2021, 14:26
Wobei "endlos" relativ ist. Irgendwann stoppt die ReGaHSS die auch von selbst.
das relative endlos :mrgreen: ist nach 500000 iterations erreicht. (standardmäßig zumindest)
while zu begrenzen ist aber trotzdem in jedem Fall hilfreich.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: CR im String suchen

Beitrag von dtp » 07.04.2021, 07:16

alchy hat geschrieben:
06.04.2021, 22:07
das relative endlos :mrgreen: ist nach 500000 iterations erreicht. (standardmäßig zumindest)
Jepp. Aber ich hatte es trotzdem schon geschafft, die CCU damit noch zum Absturz zu bringen, wenn innerhalb einer solchen while-Schleife ungünstige Befehle bzw. Prozesse ablaufen. Nach einer gewissen Zeit erscheint dann die Meldung, dass eine Komponente nicht mehr erreicht werden konnte und die CCU reagiert nicht mehr. Da hilft dann nur ein extern getriggerter Neustart.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

BitMac
Beiträge: 183
Registriert: 27.11.2015, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 8 Mal

Re: CR im String suchen

Beitrag von BitMac » 17.04.2021, 21:24

Danke für die Anregung.
Bis jetzt ist noch nichts passiert, aber ich werde das einbauen.

Gruß
Andreas

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“