In einem String mit Zahlen und Buchstaben die Position des nächsten Buchstabens auslesen



  • Hallo,

    für mein Problem gibt's sicher ne einfache Lösung, aber ich komm da einfach nicht drauf.(Programmiere in letzter Zeit wohl zuviel in Rapid und DIN Code 😮 )

    ich habe einen String mit Zahlen, Buchstaben und Leerzeichen.
    Beispiel:
    Teststring = "G1 X56 Y90";

    Ich lese mit:
    position= Teststring.Pos("X");
    die position des X aus.

    Wie komme ich an die Position des nächsten Buchstabens nach dem X (der kann von A - Z alles sein).
    Und wie finde ich heraus, ob überhaupt noch ein Buchstabe dem X folgt?

    Wenn jedes mal zwischen Zahlen und Buchstaben ein Leerzeichen stehen würde wäre das ja einfach, dann würde ich einfach nach der Position des nächsten Leerzeichens suchen, aber das ist nicht der Fall.
    Jedes Zeichen im String auf Zahlen prüfen scheint mir da doch ziemlich umständlich.

    Bin für jeden Lösungsansatz dankbar. Die Ausarbeitung erledige ich dann schon.

    VG
    Editor



  • Hallo

    Für std::string gibt es die Methode find_first_of. Für AnsiString ist mir keine solche Funktion bekannt, liese sich aber sicher nachprogrammieren.

    bis bald
    akari



  • Wenn es immer wieder fixe Abstände hinter dem x sind, dann kannst du diese ja auf einen Buchstaben abprüfen.
    Meinetwegen z.B. Position 3,4,5 nach x etc.
    Ansonsten halt ab der Positionx + 1 (oder 2 falls nach x immer eine Zahl folgt) nach dem nächsten Vorkommen eines Buchstabens suchen.



  • Hmm. Eine Methode die das macht wirst du sicherlich im Ansi nicht finden.

    Schreib dir einfach selber eine. Anhand der ASCII Tabelle kannst Du sehr
    einfach unterscheiden ob es ein Buchstabe, Zahl oder Sonderzeichen ist.
    Ich denke den Rest kannst Du dir selber denken.



  • Slashi schrieb:

    Hmm. Eine Methode die das macht wirst du sicherlich im Ansi nicht finden.

    Schreib dir einfach selber eine. Anhand der ASCII Tabelle kannst Du sehr
    einfach unterscheiden ob es ein Buchstabe, Zahl oder Sonderzeichen ist.
    Ich denke den Rest kannst Du dir selber denken.

    Genau so würde ich es auch machen.
    Zeichen für Zeichen durchgehen und abfragen ob das aktuelle Zeichen ein Buchstabe ist (sind ja nur 2 Bereiche in der ASCII-Tabelle) und das erste Zeichen was zutrifft zurück geben / weg speichern.



  • Vielen Dank für die schnellen Antworten und Anregungen.

    Da hab ich ja ein paar gute Anregungen, die ich jetzt mal umsetzen werde.
    Mal sehen, was mir da am Besten gefällt

    VG
    Editor



  • Editor schrieb:

    Teststring = "G1 X56 Y90";

    Ist das G-Code? Also für CNC-Programmierung? Dann beachte dass verschiedene Steuerungstypen keine Leerzeichen kennen => G1X56Y90. Wenn es G-Code ist und Du es öfters brauchst, kannst Du Dir auch gleich einen Parser schreiben, die Grammatik ist simpel.



  • @ Witte
    Ja ist G Code, oder auch DIN Code genannt. Ich schreibe ne Simulation für alte Sinumeric 8 Steuerungen, die kommen mit Leerzeichen klar und sind bei uns noch teilweise in Betrieb. Die zu programmieren macht noch richtig Spaß. Heute erzeugt die CAD Software ja oft schon CNC Programme, oder es wird mit IMA WOB usw. gearbeitet.
    Ja an nen Parser hab ich auch schon gedacht, lässt sich relativ einfach umsetzen.

    VG
    Editor


Anmelden zum Antworten