Eine Frage von einer Reglar-Expression

Verschiedenes zu Qt
Antworten
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Eine Frage von einer Reglar-Expression

Beitrag 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?
:oops: :oops: :oops: :oops:
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag 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
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Beitrag von Hass »

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
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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

QStringList list;
list = string.split( " " );
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Beitrag von Hass »

FlorianBecker hat geschrieben:QStringList list;
list = string.split( " " );
????
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag 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 " "
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
caligano
Beiträge: 126
Registriert: 19. August 2006 15:33

Beitrag 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.
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Beitrag 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
Antworten