Seite 1 von 1
Eine Frage von einer Reglar-Expression
Verfasst: 5. September 2006 18:17
von Hass
Hallo zusammen,
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?

Verfasst: 5. September 2006 19:19
von dhcase
Die Daten sind doch XML, warum nimmst du nicht einfach das XML-Modul von Qt?
http://doc.trolltech.com/4.1/qtxml.html
Verfasst: 5. September 2006 20:01
von Hass
Nein,nein.
Wie du mir sagtest,verstehe ich genau.
Aber ich werde damit in einem spziellen Gebiete verwenden.
Z.B, ich muss die Xmlstring aufs Innernetwerk passen, dann wird Client diese Xmlstring zu einem Objekt wieder Kombinaten.
Verfasst: 5. September 2006 23:43
von FlorianBecker
QStringList list;
list = string.split( " " );
Verfasst: 9. September 2006 15:02
von Hass
FlorianBecker hat geschrieben:QStringList list;
list = string.split( " " );
????
Verfasst: 9. September 2006 15:45
von ChMaster
Hass hat geschrieben:FlorianBecker hat geschrieben:QStringList list;
list = string.split( " " );
????
string.split( " " );
string ist dein variabel name ala hass.split( " " );
was du dem split member von QString übergibst ist ein splitseperator ala
";" oder "," oder " "
Verfasst: 9. September 2006 15:47
von caligano
Hallo!
Das geht mit
QRegExp ganz gut:
Code: Alles auswählen
QRegExp rx("<addr>(.+)</addr><pt>(.+)</pt><nm>(.+)</nm><unm>(.+)</unm>");
Dazu mal ein kleines Test-Programm:
Es wendet den regulären Ausdruck auf deinen Beispiel-String an und gibt das Resultat in einem QListWidget aus.
main.cpp
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();
}
Output:
<addr>w1</addr><pt>w2</pt><nm>w3</nm><unm>4</unm>
w1
w2
w3
4
In der while-Schleife kannst du nun z.B. die Einträge der QList in ein Array speichern (dann statt
new QListWidgetItem...).
Oder du lässt die Schleife weg, und kannst dann so auf die einzelnen Einträge zugreifen:
Code: Alles auswählen
QString addr = list.at(1);
QString pt = list.at(2);
usw...
list.at(0) liefert dir den gesamten
str nochmal.
Verfasst: 9. September 2006 17:05
von Hass
caligano hat geschrieben:Hallo!
Das geht mit
QRegExp ganz gut:
Code: Alles auswählen
QRegExp rx("<addr>(.+)</addr><pt>(.+)</pt><nm>(.+)</nm><unm>(.+)</unm>");
Dazu mal ein kleines Test-Programm:
Es wendet den regulären Ausdruck auf deinen Beispiel-String an und gibt das Resultat in einem QListWidget aus.
main.cpp
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();
}
Output:
<addr>w1</addr><pt>w2</pt><nm>w3</nm><unm>4</unm>
w1
w2
w3
4
In der while-Schleife kannst du nun z.B. die Einträge der QList in ein Array speichern (dann statt
new QListWidgetItem...).
Oder du lässt die Schleife weg, und kannst dann so auf die einzelnen Einträge zugreifen:
Code: Alles auswählen
QString addr = list.at(1);
QString pt = list.at(2);
usw...
list.at(0) liefert dir den gesamten
str nochmal.
Viele Danke....
Dafür ist was ich gedacht habe... ...
Tschüssssssss