String zerstückeln: Chr im Text speichern

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Bibi.

    String zerstückeln: Chr im Text speichern

    Guten Tag,

    ich stehe gerade vor einer kleinen Aufgabe die doch nicht so simple scheint wie erwartet.
    Ich möchte über einen Bondrucker die Schublade öffnen was alles ohne Probleme klappt. Jedoch möchte ich die Sequenz dafür in einem String abspeichern. Man soll jederzeit die Möglichkeit haben diese Sequenz abspeichern und verändern zu können.

    Das Problem: Die Sequenz wird wie folgt angegeben

    VB.NET-Quellcode

    1. Chr(27) + "p" + Chr(0) + "pz"


    Das kann man leider so nicht in einem String speichern, auch ist es von der Bearbeitung für einen Menschen unmöglich.
    Mein Gedanke (in einer anderen Software gesehen) geht nun dahin diesen Code etwas umzugestalten um ihn bei Verwendung zu zerstückeln.

    Der Code könnte dann wie folgt aussehen:

    VB.NET-Quellcode

    1. {CHS:27}p{CHS:0}pz


    Nur wie bekomme ich es hin aus diesem Text nun folgende Sequenz zu machen? Genauer genommen, wie zerstückel ich ein "{CHS:27}" um CHR(27) darauf zu machen?

    Ich bin über jegliche Hilfe sehr dankbar.
    Sind das Steuerzeichen für eine Hardware?
    Speichere sie als Byte ab, genau so, wie sie gesendet werden, sonst bekommst Du in einer anderssprachigen Umgebung ggf. Ärger.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    kleinM schrieb:

    Willst du nur die Zahl "27" aus dem String ziehen?
    Das könnte man ja mit InStr("{CHS:27}", "27") lösen...

    Eigentlich möchte ich die Zahl(Unbekannt) zwischen dem "{CHS:UNBEKANNT}" ermitteln um sie später mit CHR(27) zu verwenden.


    RodFromGermany schrieb:

    Sind das Steuerzeichen für eine Hardware?
    Speichere sie als Byte ab, genau so, wie sie gesendet werden, sonst bekommst Du in einer anderssprachigen Umgebung ggf. Ärger.

    Korrekt, ich möchte Hardware damit ansteuern bzw. gebe diese Sequenzen an einen Drucker weiter.
    Diese ESC-Sequenzen bekommt man von diversen Drucker Anbietern (in diesem Falle Epson) mitgeliefert. Bsp: faq.kassen.net/content/9/46/de…uer-den-epson-tm_xxx.html

    Hardcoded funktioniert das wunderbar. Nur möchte ich einem potentiellen Kunden die Möglichkeit geben dieses Sequenz als Text abzuspeichern. So habe ich es bei einer andere Software gesehen wo man den Code, wie oben gezeigt, eingeben kann. Internet wird es dann wohl ausgewertet aber dafür müsste ich wissen wie ich diesen String zerstückel bzw. besagte stellen.

    Danke für die Hilfe bis hier hin :)
    Wenn diesen "Code" als Text hast geht das mit Regex.

    VB.NET-Quellcode

    1. Dim rege As New System.Text.RegularExpressions.Regex("[0-9][0-9]|[0-9]")
    2. Dim stri As String = "{CHS:27}p{CHS:0}pz"
    3. Dim matches As System.Text.RegularExpressions.MatchCollection = rege.Matches(stri)
    4. For Each treffer As System.Text.RegularExpressions.Match In matches
    5. MessageBox.Show("CHR(" & treffer.ToString & ")")
    6. Next


    mfG

    Derfuhr
    Hallo Derfur,

    für das oben genannte Beispiel würde es zufälligerweise funktionieren.
    Nur was passiert wenn ich eine Zahl außerhalb des {CHR:} Tags habe?
    Der String könnte wie folgt aussehen:

    VB.NET-Quellcode

    1. {CHS:27}p{CHS:0}pz1


    Deiner Routine entsprechend würde er alle Zahlen entnehmen (sehe ich richtig?) und ausgeben, jedoch möchte ich nur die Zahlen zwischen den {CHR:} Code haben.

    Danke für den Ansatz, den werde ich so schon mal verwenden bis ich eine optimalere Lösung habe :)
    Das ist mit diesem Beispiel auch kein Problem.Testemal folgenden Code:

    VB.NET-Quellcode

    1. Dim rege As New System.Text.RegularExpressions.Regex("[0-9][0-9]|[0-9]")
    2. Dim stri As String = "{CHS:27}p{CHS:0}pz23jnjf87 8 47"
    3. Dim matches As System.Text.RegularExpressions.MatchCollection = rege.Matches(stri)
    4. For Each treffer As System.Text.RegularExpressions.Match In matches
    5. MessageBox.Show("CHR(" & treffer.ToString & ")")
    6. Next


    "[0-9] [0-9] | [0-9]" Damit werden "Treffer" gesucht, in diesem beispiel wird nach zweistelligen Zahlen gesucht "[0-9] [0-9]" das "|" bedeutet oder, und "[0-9]" nachdem "|" steht dann für eine einstellige Zahl, Also wird nach zweistelligen undeinstelligen Zhalen gesucht. Schau dir mal dieses Tutorial an, damit habe ich auch kürzlich angefangen, es wird sehr gut erkärt wie "Regex" funktioniert.

    mfG

    Derfuhr

    kleinM schrieb:

    Hier wäre ein Link dazu, der helfen könnte. Ist zwar in Java aber das sollte jetzt nicht die Schwierigkeit sein:
    java-forum.org/java-basics-anf…en-integer-speichern.html

    Danke dir, das hat mich zu folgender Lösung gebracht.

    VB.NET-Quellcode

    1. Dim rege As New System.Text.RegularExpressions.Regex("{CHR:(.*?)}")
    2. Dim matches As System.Text.RegularExpressions.MatchCollection = rege.Matches(sString)
    3. For Each treffer As System.Text.RegularExpressions.Match In matches
    4. sString = sString.Replace(treffer.ToString, Chr(GetID(treffer.ToString.Replace("{CHR:", "").Replace("}", ""))))
    5. Next
    6. sSequenz = sString



    Derfuhr schrieb:


    "[0-9] [0-9] | [0-9]" Damit werden "Treffer" gesucht, in diesem beispiel wird nach zweistelligen Zahlen gesucht "[0-9] [0-9]" das "|" bedeutet oder, und "[0-9]" nachdem "|" steht dann für eine einstellige Zahl, Also wird nach zweistelligen undeinstelligen Zhalen gesucht.

    Das Problem war das nur Zahlen innerhalb "{CHR:}" gefunden werden sollen. Aber RegEx war schon der richtige Weg, konnte es dann mit oben genanntem lösen. Sollte ich noch mal mit dem Thema zu tun haben, habe ich nun ja einen guten Link von dir.

    Ich danke vielmals, Thema ist erledigt. :)