QString



  • Abend oder Morgen .

    Möchte einen QString ändern

    Name1wert/Name1

    Möchte Name1 und wert in verschiedenen variablen haben, habe es so gemacht. Gibt es einen besseren Weg??

    QString back;
        back=zeile[unterordner];
        QString altername=back.remove(1,back.indexOf("/",1));
        QString back2;
        back2=zeile[unterordner];
        QString varia =back2.remove(altername);
        zeile[unterordner].remove(varia).remove("/"+altername);
    


  • In Qt gibt es zum Glück auch regular expressions
    Damit lässt sich beliebiger Text nach Mustern durchsuchen, bzw. umwandeln.
    Ein Beispiel dazu ist http://doc.qt.nokia.com/4.7/tools-regexp.html

    Hier ein Beispiel.

    QString back="Otto4711/Otto";
    // pattern: ([A-Za-z_]+)(\d+)/\1
    // Backslash ist Teil des Pattern, deshalb im String doppelt
    QRegExp rx("([A-Za-z_]+)(\\d+)/\\1")
    if (rx.indexOf(back) != -1) {
      // Muster gefunden
      rx.cap(1) ist "Otto"
      rx.cap(2) ist "4711" 
    } else {
      // Muster passt nicht
    }
    


  • Wie kommt denn der String zustande? Wenn er immer die besagte Form hat, sind reguläre Ausdrücke wohl die eleganteste Lösung. Sollte auch "Namewert/Name" möglich sein (oder sonstwas), solltest du was an deinem Programm ändern. Steuerzeichen verwenden, oder eine Liste.

    Es gibt auch eine ganz nützliche Funktion

    QString::split()
    

    mit der du Strings an bestimmten Zeichen splitten kannst.

    Ist in deinem momentanen Fall vielleicht nicht so hilfreich, aber zur Sicherheit gebe ich mal ein kurzes Beispiel:

    QString test = "Name1wert/Name1";
    QStringList testList = test.split("/");
    //testList enthält nun zwei Strings, "Name1wert" und "Name1"
    


  • @holzeimer

    error C2039: 'indexOf': Ist kein Element von 'QRegExp'



  • Du darfst selber die Doku bemühen, wenn du willst...
    Es sollte klar sein, was gemeint ist, zwei mögliche Lösungen gibt es hier:
    QRegExp::indexIn() oder QString::indexOf(). Such dir eins aus, passende Überladung natürlich...

    Außerdem hast du doch schon eine schöne Lösung im qtforum bekommen, auf die du noch nicht geantwortet hast.


Anmelden zum Antworten