LabVIEWForum.de
Format für Regulärer Ausdruck - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Format für Regulärer Ausdruck (/Thread-Format-fuer-Regulaerer-Ausdruck)



Format für Regulärer Ausdruck - hansi9990 - 28.02.2016 10:26

Hallo

Ich habe hier ein kleines Verständnisproblem mit dem Format für reguläre Ausdrücke im String suchen/ersetzen vi.
Ich habe hier ein Gerät (GPS Simulator) der via Telnet angesteuert werden kann, die Ansteuereung habe ich mit dem im Internet Toolkit entahltenen Telnet vi's realisiert (ist out of Date aber funktioniert).
Am Telnet Read vi kommen jedoch etwas seltsame Zeichen zurück, (siehe Anhang, normale und \-code Anzeige).
Im Prinzip sind die Zeichen ein Backslash \B und dann diese eigenartige Kombination [1m oder [22m
Die Zahlen nach der Klammer können vareieren datum wollte ich mit dem String Suchen\Ersetzern vi diese Zeichen Filtern und grundsätzlich funktioniert das auch aber wie bekomme ich es hin das alle Zeichenfolgen [0-9m entfernt werden?


RE: Format für Regulärer Ausdruck - IchSelbst - 28.02.2016 11:17

(28.02.2016 10:26 )hansi9990 schrieb:  Im Prinzip sind die Zeichen ein Backslash \B und dann diese eigenartige Kombination [1m oder [22m
Gibt's das auch noch: VT100-Escape-Sequenzen (guckst du Wikipedia). Eine ESC-Sequenz dieser Art beginnt immer mit \1B[ und endet mit einem "Kommando", hier das kleine M. Dazwischen stehen die Parameter dieses Kommandos.

Zitat:Die Zahlen nach der Klammer können vareieren datum wollte ich mit dem String Suchen\Ersetzern vi diese Zeichen Filtern und grundsätzlich funktioniert das auch aber wie bekomme ich es hin das alle Zeichenfolgen [0-9m entfernt werden?
Nimm nicht "String suchen und ersetzen", sondern "Muster suchen und ersetzen". Als Muster gibst du "\\1B\\5B[0-9]+\\m" an - und zwar in einen String, der auf "\-Code-Anzeige" steht. In der Hilfe zu diesem VI findest du die Erklärung zu den Zeichen im Muster-String.


RE: Format für Regulärer Ausdruck - hansi9990 - 28.02.2016 12:52

Ach so, ich habe mich schon gefragt was das für blöde Zeichen sindWink
So funktioniert es, herzlichen Dank Smile

Jetzt müsste ich nur noch eine Möglichkeit finden die "Bytes to Read" dynamisch zu setzen da diese sich ändern, als Workaround müsste ich diese einfach sehr hoch setzen und nach dem Telnet Read ein "Fehler aufheben" einbauen.


RE: Format für Regulärer Ausdruck - GerdW - 28.02.2016 13:54

Hallo Hansi,

Zitat:Jetzt müsste ich nur noch eine Möglichkeit finden die "Bytes to Read" dynamisch zu setzen da diese sich ändern, als Workaround müsste ich diese einfach sehr hoch setzen und nach dem Telnet Read ein "Fehler aufheben" einbauen.
Weder noch!
Einfach das TermChar aktivieren und verwenden, d.h. die "Bytes to read" auf einen unrealistisch hohen Wert setzen. Wenn man nach deinen Beispielbildern geht, hast du immer wieder CR/LF im Datenstrom und keine Botschaft mit mehr als "99" Zeichen ausreichen…

Tipp: Schau mal hier nach den vielen Threads zum Thema "serielle Schnittstelle" und deren effektive Handhabung!


RE: Format für Regulärer Ausdruck - hansi9990 - 28.02.2016 14:35

Ich habe aber keine serielle Schnittstelle sondern LAN, wie ich schon oben geschrieben habe verwende ich dazu die Telnet vi's aus dem internet Toolkit, was anderes habe ich nicht gefunden und das SSH Tool von Labwerx funktioniert auch nur mit SSH und nich Telnet. Ein Beispiel ist im Anhang.


RE: Format für Regulärer Ausdruck - GerdW - 28.02.2016 18:24

Ok, bei Telnet/LAN fehlt natürlich das TermChar. Habe ich auf dem kleinen Handydisplay nicht gesehen…

Dann bleibt wohl nur
- größere Byteanzahlen abfragen und mit dem TimeOut-Fehler arbeiten
- kleinere Byteanzahlen abfragen (z.B. erst 8 Byte, danach Einzelbytes) und dort nach dem Zeilenende suchen

Unterstützen die Telnet-Funktionen einen Lesebuffer wie bei VISA?


RE: Format für Regulärer Ausdruck - hansi9990 - 29.02.2016 06:35

Zumindest kann man zwischen normal, line und buffered wählen.
http://zone.ni.com/reference/en-XX/help/370014C-01/internet/telnet_read/
Übersicht aller Telnet vi's:
http://zone.ni.com/reference/en-XX/help/370014C-01/internet/telnet_vis/

Nach dem Manual wäre es am einfachsten den Modus auf normal zu setzen die Anzahl der "bytes to read" hoch zu setzen und einen erträglichen Timeout einzustellen aber ich befürchte fast das es da ein Problem gibt, denn das habe ich schon versucht aber dann kommt nichts zurück, verhält sich also genau so wie der buffered Modus beschrieben ist.
Muss ich nochmal checken, evtl. hatte ich bei dem Versuch einen Fehler gemacht.
Die Beschreibung zu buffered hört sich für mich auch nicht ganz logisch an denn ich würde eigentlich gerade im buffered Modus erwarten das alle bis zum Timeout empfangenen Daten angezeigt würden, also gepuffert werden. Wer lässt sich denn immer diese Umschreibungen einfallen? Big GrinBig Grin


RE: Format für Regulärer Ausdruck - GerdW - 29.02.2016 08:16

Hallo hansi,

der Beschreibung nach solltest du den Lesemodus "line" verwenden: der arbeitet lt. deinem Link genau so wie das VISARead mit TermChar!
Also "line"-Modus mit LF als "line separator"…


RE: Format für Regulärer Ausdruck - hansi9990 - 29.02.2016 19:04

Hallo Gerd

Danke für die Unterstützung.
Also ich habe es jetzt so ähnlich gemacht wie von dir vorgeschlagen.
Da dieses Gerät (GPS Simulator der Fa. Racelogic) allerdings etwas eigenartig in der Rückgabe ist habe ich als line separator das > Zeichen verwendet da dies nach jeder Eingabe die Eingabezeile darstellt und als letztes Zeichen erscheint. Die Antowert auf einen einzelnen Befehl sieht meist so aus:


OK

LABSAT>

Einzige Ausnahem ist wenn ich den quit Befehl zum beenden senden muss, hier erhalte ich keine Rückgabe, darum habe ich das Telnet Read VI mit einem Case deaktiviert wenn ich das quit sende.

[attachment=55395]