Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Werte aus QString extrahieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.11.2002
    Ort
    Obertshausen
    Beiträge
    87

    Werte aus QString extrahieren

    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
    Celindir
    May the source be with you...

    www.celindir.de

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Schau dir mla QRegExp an und dort die Beispiele in der Doku zur Methode capturedTexts ()

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.11.2002
    Ort
    Obertshausen
    Beiträge
    87
    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 auferlegt
    Geändert von celindir (23-05-2003 um 10:36 Uhr)
    Celindir
    May the source be with you...

    www.celindir.de

  4. #4
    Registrierter Benutzer
    Registriert seit
    14.11.2002
    Ort
    Obertshausen
    Beiträge
    87
    Bin ich auf dem richtigen Weg??


    Beispiel:

    Code:
    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  ???
    }
    Code:
    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
    Celindir
    May the source be with you...

    www.celindir.de

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du musst den Backslash immer mit einem weiteren "Esapen", weil er sonst von C++ als Beginn einer Steuersequenz interpretiert wird.

    Code:
    #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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    14.11.2002
    Ort
    Obertshausen
    Beiträge
    87
    Danke,

    jetzt gehts!

    Gruß
    Celindir
    May the source be with you...

    www.celindir.de

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •