\t in einen String schreiben

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

\t in einen String schreiben

Beitrag von Black » 07.12.2018, 14:06

irgendwie häng ich grad:
ich möchte gerne \t als zwei zeichen, also "\t" und nicht als #9 aufgelöst in einen String schreiben. Irgendwie krieg ich das net sinnig gepackt.

geht das gar nicht ?

Thnx, 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

Benutzeravatar
klana
Beiträge: 1080
Registriert: 08.02.2015, 08:37
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 54 Mal
Danksagung erhalten: 26 Mal

Re: \t in einen String schreiben

Beitrag von klana » 07.12.2018, 14:19

Schon mal mit Doppeltem Backslash probiert?

"\\t"
Gruß
Klana
Gruß Klana
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.

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

Re: \t in einen String schreiben

Beitrag von Black » 07.12.2018, 14:28

si, hab ich

Direkt in Script ausführen auf der CCU, ohne mein programm dazwischen, da isses identisch:

Code: Alles auswählen

string s="\\tHallo";
WriteLine (s);
WriteLine (s.Find ('t'));   ! ergibt die -1, heisst nicht in s enthalten
WriteLine (s.Contains ('t')); ! ergibt False, heisst nicht in s enthalten
WriteLine("Done");
ergab

Code: Alles auswählen

\	Hallo
-1
false
Done
Eigentlich hätte er bei dem doppelquote \ dann das t in dem String finden müssen.
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

Benutzeravatar
jmaus
Beiträge: 9840
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: \t in einen String schreiben

Beitrag von jmaus » 07.12.2018, 14:29

Hier scheint es in der Tat wohl auf den ersten Blick einen Bug in ReGa zu geben. Denn keiner der beiden folgenden Skripte liefern das eigentlich erwartete Ergebnis:

Code: Alles auswählen

string a = "\\" # "t";
WriteLine(a);

Code: Alles auswählen

string a = "\\t";
WriteLine(a);
Der erste liefert einen Syntax Fehler und der zweite fügt zwar das \ hinzu, hängt dann aber einen echten Tabulator an. Da scheint mir in der Tat etwas faul zu sein und ich werde mir das mal bei Gelegenheit anschauen.

EDIT:
Als Workaround bis das Problem verstanden/repariert ist könnte man folgendes (wenn auch ziemlich kompliziertes) Konstrukt nehmen:

Code: Alles auswählen

string a = ("\ " # "t").Replace(" ", "");
WriteLine(a);
Das sollte nun das "\t" als String ausspucken.
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

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

Re: \t in einen String schreiben

Beitrag von Black » 07.12.2018, 14:35

gut... brauch ich net extra nen issue für aufzumachen dafür ?
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

Bratmaxe
Beiträge: 1573
Registriert: 28.05.2015, 12:48
Wohnort: Willich
Hat sich bedankt: 4 Mal
Danksagung erhalten: 10 Mal

Re: \t in einen String schreiben

Beitrag von Bratmaxe » 07.12.2018, 14:36

Im PDF-Dokument der Sprachbeschreibung auf Seite 19 ist beschrieben, das \t = Tabulator (ASCII 0x09) ist.

Du kannst aber den String mit .UriEncode() abspeichern und bei Verwendung wieder mit .UriDecode() abrufen, dann ist es ein \t :wink:
Ist natürlich ein bisschen hintenrum durch die Brust!

Gruß Carsten
Gruß Carsten

Benutzeravatar
jmaus
Beiträge: 9840
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: \t in einen String schreiben

Beitrag von jmaus » 07.12.2018, 14:40

Black hat geschrieben:
07.12.2018, 14:35
gut... brauch ich net extra nen issue für aufzumachen dafür ?
Das wäre lieb wenn du das trotzdem samt Beispielen machen könntest, dann vergesse ich das nicht und kann mich drauf beziehen, etc. Und gleichzeitig bekommst du so Credits für das melden eines Bugs ;)
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Benutzeravatar
jmaus
Beiträge: 9840
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: \t in einen String schreiben

Beitrag von jmaus » 07.12.2018, 14:42

Bratmaxe hat geschrieben:
07.12.2018, 14:36
Du kannst aber den String mit .UriEncode() abspeichern und bei Verwendung wieder mit .UriDecode() abrufen, dann ist es ein \t :wink:
Ist natürlich ein bisschen hintenrum durch die Brust!
Zeig mal ein Beispiel davon. Also ich bekomm das hier nicht hin mit UriEncode/UriDecode...
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

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

Re: \t in einen String schreiben

Beitrag von Black » 07.12.2018, 14:44

joah...

aber wenn wir einmal dabei sind, die rega scheint generell keine doublequotes zu mögen:

Code: Alles auswählen

string s="\\nHallo";
WriteLine (s);
WriteLine (s.Find ('n'));   ! ergibt die -1, heisst nicht in s enthalten
WriteLine (s.Contains ('n')); ! ergibt False, heisst nicht in s enthalten
WriteLine("Done");
ergibt

Code: Alles auswählen

\
Hallo
-1
false
Done
ich mach mal ein issue, wo gibts den Link dazu ?
Zuletzt geändert von Black am 07.12.2018, 15:10, insgesamt 2-mal geändert.
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

Benutzeravatar
jmaus
Beiträge: 9840
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: \t in einen String schreiben

Beitrag von jmaus » 07.12.2018, 14:46

Black hat geschrieben:
07.12.2018, 14:44
aber wenn wir einmal dabei sind, die rega schein generell keine doublequotes zu mögen:
[...]
ich mal mal ein issue....
Genau das scheint das ursprüngliche Problem zu sein und auch der Grund wieso \\t nicht geht.

Danke für das Issue.

Der Link zum GitHub ist hier:
https://github.com/jens-maus/RaspberryMatic/issues
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“