IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Souci de comparaison de QString

  1. #1
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut Souci de comparaison de QString
    bonjour,

    je n'arrive pas a comprendre pourquoi ma comparaison de qstring ne marche pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    QFile file("fichier.txt") ;
    file.open(QIODevice::ReadOnly) ;
    QTextStream streamtext(&file) ;
    QString textqstr =  streamtext.readAll() ;
    QMessageBox::information(this, "Fin de téléchargement", textqstr);
    QString ver = "2.5";
    if(textqstr.compare(ver) == 0) {
    QMessageBox::information(this, "Fin de téléchargement", "vous avez la derniere version");
     }
    si quelqu'un a une idee svp ?
    merci d'avance ;-)

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    C'est surement que tes chaines ne sont pas exactement égales.
    Regarde avec un debugger la valeur retournée par la méthode compare et surtout ce que contient exactement tes chaines textqstr et ver.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    bonne idee mais... je ne sais pas me servir d'un debugger...
    je suis sur qt creator, en je ne sais pas comment il fonctionne pour debugger.
    ni gdb non plus...

    peut etre y a t il aussi un autre moyen que compaer pour comparer mes 2 qstring ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Voici un programme pour illustrer l'utilisation de compare , qui est une instruction de la class QString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <QString>
    #include <QTextStream>
    int main()
    {       QString mot1 = "2.5" ;
    	QString mot2 = "2.5" ;
    	QString mot3 = "mots mots mots ...2.5" ;
    	QTextStream notcout(stdout) ;
    		    notcout << "\n===============================================================" ;
    		    notcout << "\nmot1 = \"" << mot1 << "\"\tmot2 = \""<< mot2 << "\"\tmot3 = \""  << mot3 << "\"";
    	            notcout << "\n\nMot.compare(mot2) = " << mot1.compare(mot2)  ;
    		    notcout << "\nMot.compare(mot3) = " << mot2.compare(mot3)  ;
    		    notcout << "\n===============================================================\n" << endl ;
    return 0 ;
    }

  5. #5
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    ça semble marche comme cela, du moins on dirait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QString ver = "2.5";
    if(ver.compare(textqstr) < 0)
         QMessageBox::information(this, (QString::fromUtf8("Mise à jour")), tr("egal"));
    merci beaucoup ;-)

  6. #6
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    ?

  7. #7
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    je ne comprends rien, ça ne marche plus la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QString ver = "2.5";
            if(ver.compare(textqstr) == 0) {
                QMessageBox::information(this, (QString::fromUtf8("Mise à jour")), (QString::fromUtf8("Vous avez la dernière version")));
            }
            else {
                QMessageBox::information(this, (QString::fromUtf8("Mise à jour")), ("Une nouvelle version est disponible"));
            }
    est ce dans les if else que je fais des betises ?

  8. #8
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Tu as vérifié le contenu de textqstr ? Il y a peut être un espace ou autre chose qui gêne. Comme suggéré plus haut tu peux utiliser le debugger, sinon à l'ancienne en affichant le contenu de tes deux chaînes avec qDebug.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <QDebug>
     
    qDebug() << "ver:" + ver << "textqstr: " + textqstr;

    Ps : dans la doc de la fonction compare "Lexically compares this string", et pour l'opérateur == "The comparison is based exclusively on the numeric Unicode values of the characters". J'ai du mal à saisir la différence, pour ma part j'utilise compare uniquement pour faire les comparaisons case insensitive.
    http://qt.developpez.com/doc/latest/...html#compare-5
    http://qt.developpez.com/doc/latest/...operator-eq-eq

  9. #9
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    merci de m'avoir montre pour qdebug, je ne savais pas comment ça marchait...

    voila ce qu'il me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "ver: 2.5" "textqstr: 2.5
    "
    c'est pourtant bien egal la ?

    je comprends rien, c'est la comparaison qui va pas.

    je vais faire autrement, tant pis.

    merci beaucoup pour tout ;-)

  10. #10
    Membre confirmé
    Avatar de bobti89
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Hum apparemment il y a un retour à la ligne en plus dans la deuxième chaine ! Elles ne sont donc pas égales...

  11. #11
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    En fait mon exemple n'était pas idéal, car pour faire plus joli j'ai collé le texte et le contenu de la variable, avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qDebug() << "ver:" << ver << "textqstr:" << textqstr;
    le contenu des variables sera encadré de guillemets et tu sauras exactement quels caractères elles contiennent (espace et sauts de lignes inclus). Là comme l'a dit bobti89, tu as l'air d'avoir un saut de ligne à la fin de textqstr.

    Pour nettoyer les espaces (sauts de lignes, tabs etc) en début et fin de chaîne tu as cette fonction : http://qt.developpez.com/doc/latest/...g.html#trimmed

  12. #12
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    il m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ver: ".9" textqstr: "2.5
     
    
    et me donne un resultat negatif donc que c'est egal, c'est bien ça ?).

    j'ai le meme resultat avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ver: "2.5" textqstr: "2.5
     
    
    tant pis, j'ai trouve une autre façon de faire qui ira bien aussi.

    encore merci pour tout ;-)

  13. #13
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Il faut bien lire la doc, même si j'admet que ce point n'est pas forcément très clair :
    http://qt.developpez.com/doc/latest/...html#compare-5
    Un résultat négatif ne veut pas dire que c'est égal, il faut que la fonction renvoie 0 pour ça.

    Et regardes bien le texte affiché par textqstr, le guillemet fermant est à la ligne, tu as donc un saut de ligne à la fin de ta chaîne. Ça été dit au dessus déjà.

  14. #14
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    cette fois c'est bon.
    et j'ai vu mes erreurs (au sujet de compare, et pour les espaces).

    merci de votre patience ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Soucis avec les comparaisons de dates
    Par Te-Deum dans le forum SQL
    Réponses: 4
    Dernier message: 29/11/2011, 12h25
  2. Soucis de comparaison de date
    Par sendoshi dans le forum JSF
    Réponses: 2
    Dernier message: 03/12/2009, 17h02
  3. Comparaison de QString
    Par exporta22 dans le forum Débuter
    Réponses: 5
    Dernier message: 17/11/2009, 21h10
  4. souci avec une comparaison de date
    Par Ludo75 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/02/2006, 15h59
  5. Réponses: 6
    Dernier message: 21/01/2004, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo