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.htmlHier 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.