CR im String suchen
Moderator: Co-Administratoren
-
- Beiträge: 186
- 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
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
In der Form:
while (abfrage != "\\r") {
Doch das funktioniert so nicht.
Wie ist denn bloß die korrekte Syntax ?
Beste Grüße
Andreas
- Black
- Beiträge: 5480
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 424 Mal
- Danksagung erhalten: 1074 Mal
- Kontaktdaten:
Re: CR im String suchen
präzisiere doch mal die Programstellung. Du willst nur wissen, ob ein String s das carrigeRecurn enthält ?
das geht am einfachsten mit
Black
das geht am einfachsten mit
Code: Alles auswählen
string s= "teststring\rhhhjjjjkkk";
if (s.Contains ("\r")) {WriteLine ("enthält ein carrigeReturn"); }
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
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
-
- Beiträge: 186
- 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)
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") {
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") {
- Roland M.
- Beiträge: 9804
- Registriert: 08.12.2012, 15:53
- System: CCU
- Wohnort: Graz, Österreich
- Hat sich bedankt: 252 Mal
- Danksagung erhalten: 1381 Mal
Re: CR im String suchen
Hallo Andreas!
var x = s.Find("\r");
var s1 = s.Substr(0,x);
Roland
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:
-----------------------------------------------------------------------
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,...
- 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,...
-
- Beiträge: 10660
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 321 Mal
- Danksagung erhalten: 501 Mal
Re: CR im String suchen
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.
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:
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.
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;
...
}
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), "");
}
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.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: CR im String suchen
das relative endlos 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.
-
- Beiträge: 10660
- Registriert: 21.09.2012, 08:09
- System: CCU
- Wohnort: Stuttgart
- Hat sich bedankt: 321 Mal
- Danksagung erhalten: 501 Mal
Re: CR im String suchen
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.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.