PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Werte aus QString extrahieren



celindir
23-05-2003, 08:23
Hallo zusammen,

irgendwie müsste es ganz einfach sein, aber ich stelle mich wohl zu blöd an.

Ich habe einen QString info="Size [480 x 576] 25 fps 2.5 Mbps"
als Ergebnis einer Abfrage, deren Ergebnis sich jeweis ändert.

Aus dem möchte ich nun verlässlich folgende Werte rausholen:

int hsize = (der erste Wert zwischen den [])
int vsize = (der zweite Wert zwischen den [])
int fps = (der Wert vor fps)
float mbps = (der Wert vor Mbps)

Ich hab schon ein wenig mit QString.section(QString,int, int) rumexperimentiert, aber irgendwie brauche ich mal ein konkretes Beispiel.

Ich fürchte die Herausforderung ist fast schon zu klein für Euch, aber mir würde es sehr helfen.

Danke

anda_skoa
23-05-2003, 09:19
Schau dir mla QRegExp an und dort die Beispiele in der Doku zur Methode capturedTexts ()

Ciao,
_

celindir
23-05-2003, 10:23
Oh jeh!

RegExpr - Mit denen stehe ich auf Kriegsfuss:(

Wäre sehr dankbar für eine Nachhilfe!

Nur ein kleines Beispiel aus meinem Fall mit kurzer Erläuterung, dann kämpfe ich alleine weiter.

biiittteee! *fleh*


P.S.: Als Hausarbeit habe ich mir gleich das RegExpr-Tutorial (http://www.regenechsen.de/regex_de/regex_1_de.html) auferlegt;)

celindir
23-05-2003, 15:27
Bin ich auf dem richtigen Weg??


Beispiel:


QRegExp rx ( "\d+(?=\s*fps)" );
int pos = rx.search ("Size [480 x 576] 25 fps 2.5 Mbps");
if (pos > -1)
{
int fps = rx.cap( 1 ).toInt( 0, 10 ); //fps = 25 ???
}



QRegExp rx ( "(?:Size\s*\[) \d+\s*x\s*\d+ (?:\])" );
int pos = rx.search ("Size [480 x 576] 25 fps 2.5 Mbps");
if (pos > -1)
{
QString size = rx.cap( 1 ); //size = 480 x 576 ????
}


Ich werds später mal daheim probieren:)

Danke einstweilen

anda_skoa
23-05-2003, 15:46
Du musst den Backslash immer mit einem weiteren "Esapen", weil er sonst von C++ als Beginn einer Steuersequenz interpretiert wird.



#include <qregexp.h>
#include <qstringlist.h>

int main()
{
QString text = "Size [480 x 576] 25 fps 2.5 Mbps";

QRegExp re("\\[(\\d+)\\sx\\s(\\d+)\\]\\s(\\d+)\\sfps\\s(\\d+\\.\\d+)");

if (re.search(text) == -1)
{
qWarning("no match");
return -1;
}

QStringList list = re.capturedTexts();
for (uint i = 0; i < list.count(); ++i)
{
qDebug("match %d: %s", i, (const char*)list[i]);
}

return 0;
}


Ciao,
_

celindir
26-05-2003, 07:49
Danke,

jetzt gehts!

Gruß