Ich möchte "w1","w2","w3","w4" aus "<addr>w1</addr><pt>w2</pt><nm>w3</nm><unm>4</unm>" in ein Array speichren.
Wie kann ich die Funktion<<split()>> des QStrings benutzn?
Nein,nein.dhcase hat geschrieben:Die Daten sind doch XML, warum nimmst du nicht einfach das XML-Modul von Qt?
http://doc.trolltech.com/4.1/qtxml.html
Code: Alles auswählen
QRegExp rx("<addr>(.+)</addr><pt>(.+)</pt><nm>(.+)</nm><unm>(.+)</unm>");Code: Alles auswählen
#include <QApplication>
#include <QtGui>
#include <QRegExp>
#include <QStringList>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QRegExp #include <QApplication>
#include <QtGui>
#include <QRegExp>
#include <QStringList>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QRegExp rx("<addr>(.+)</addr><pt>(.+)</pt><nm>(.+)</nm><unm>(.+)</unm>");
QString str = "<addr>w1</addr><pt>w2</pt><nm>w3</nm><unm>4</unm>";
QListWidget *view = new QListWidget ;
rx.indexIn(str);
QStringList list = rx.capturedTexts();
QStringList::iterator it = list.begin();
while (it != list.end()) {
new QListWidgetItem(*it, view);
++it;
}
view->show();
return app.exec();
}In der while-Schleife kannst du nun z.B. die Einträge der QList in ein Array speichern (dann statt new QListWidgetItem...).<addr>w1</addr><pt>w2</pt><nm>w3</nm><unm>4</unm>
w1
w2
w3
4
Code: Alles auswählen
QString addr = list.at(1);
QString pt = list.at(2);
usw...Viele Danke....caligano hat geschrieben:Hallo!
Das geht mit QRegExp ganz gut:
Dazu mal ein kleines Test-Programm:Code: Alles auswählen
QRegExp rx("<addr>(.+)</addr><pt>(.+)</pt><nm>(.+)</nm><unm>(.+)</unm>");
Es wendet den regulären Ausdruck auf deinen Beispiel-String an und gibt das Resultat in einem QListWidget aus.
main.cppOutput:Code: Alles auswählen
#include <QApplication> #include <QtGui> #include <QRegExp> #include <QStringList> int main(int argc, char *argv[]) { QApplication app(argc, argv); QRegExp #include <QApplication> #include <QtGui> #include <QRegExp> #include <QStringList> int main(int argc, char *argv[]) { QApplication app(argc, argv); QRegExp rx("<addr>(.+)</addr><pt>(.+)</pt><nm>(.+)</nm><unm>(.+)</unm>"); QString str = "<addr>w1</addr><pt>w2</pt><nm>w3</nm><unm>4</unm>"; QListWidget *view = new QListWidget ; rx.indexIn(str); QStringList list = rx.capturedTexts(); QStringList::iterator it = list.begin(); while (it != list.end()) { new QListWidgetItem(*it, view); ++it; } view->show(); return app.exec(); }In der while-Schleife kannst du nun z.B. die Einträge der QList in ein Array speichern (dann statt new QListWidgetItem...).<addr>w1</addr><pt>w2</pt><nm>w3</nm><unm>4</unm>
w1
w2
w3
4
Oder du lässt die Schleife weg, und kannst dann so auf die einzelnen Einträge zugreifen:
list.at(0) liefert dir den gesamten str nochmal.Code: Alles auswählen
QString addr = list.at(1); QString pt = list.at(2); usw...