Seite 1 von 1

QString und QRegEx

Verfasst: 21. Juli 2010 17:13
von Aenni
Hallo Liebe QT-Experten ;)


ich bin grade dran einen QString mit Regex zu durchsuchen und die Ergebnisse zu speichern.
Bin etwas am verzweifeln und hoffe jemand kann mir helfen ;)

use: VS08 QT4.6 c++

Mein Code:

Code: Alles auswählen

//basis String - String kann new lines beinhalten 
//

QString qstr = " Tabelle1.Feld1= "Inhalt Feld1 Tab 1 ";
hier steht auch andere Text .. .
Tabelle1.Feld = "Inhalt Feld2 Tab2...."; 
Tabelle1.Feld = "Inhalt Feld3 Tab3...."; ";

// hole dir alles was nach Tabelle1.Feld in den " " steht
//
QRegExp rx ("Tabelle1.Feld\\s\\\=\\s\\\"(.*)\\\"");

int pos = rx.indexIn(qstr);

QStringList list = rx.capturedTexts();

// schreibe die ergebnisse in ein Datei:
//
QFile MyFile( "regexTest.txt" );
if (MyFile.open (QFile::WriteOnly | QFile::Text)) 
{
	QTextStream stream( &MyFile );
	for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
	{
		stream << *it << "\n";
	}
	MyFile.close();
}


Das ganze habe ich so mal probiert doch leider kommt dabei kein Ergebnis heraus.

Würde mich ueber Ansaetze freuen

Im Voraus schonmal Danke ;)

gruss

Verfasst: 21. Juli 2010 17:31
von upsala
Dein Suchstring passt nicht zur Vorgabe. Bei den Demos ist ein Beispielprogramm dabei, mit dem man RegEx'en testen kann.

Verfasst: 22. Juli 2010 09:12
von Aenni
danke fuer den Tipp,

wirklich nettes Tool ;)

Verfasst: 22. Juli 2010 11:03
von padreigh
Dein qstr ist illegal ;)

Code: Alles auswählen

QString qstr = " Tabelle1.Feld1= \"Inhalt Feld1 Tab 1\"";

// hole dir alles was nach Tabelle1.Feld in den " " steht
QString rest = qstr.replace(QRegExp("(Tabelle)\\d+\.(Feld)\\d+(=)\\","");
// oder 
QString data(  qstr.right(  qstr.size() - qstr.indexOf("\"") ) );  
 
// schreib rest raus ...
Wenn du das (.*) noch durch was sinnvolles zur gleichzeitigen Segmentierung ersetzt ist das natürlich anders, dann ist vielleicht
http://doc.trolltech.com/4.6/qregexp.ht ... uring-text von Interesse .. dann sparst du dir lauter Leerzeilen in der Ausgabe die durch gematchte whitespace's entstehen ;)