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

C++/CLI Discussion :

des résultats de methode incohérents


Sujet :

C++/CLI

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut des résultats de methode incohérents
    Bonjour,
    J'ai un résultat de la méthode find qui me correspond pas à mon attente.
    J'ai le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		mpos = wsChunk.find( L"or +APC or ");
    		pos = wsChunk.find( L"+APC or ");
    et avec la donnée wsChunk = {"+APC or "}
    je récupère mpos = 0 et pos = 0
    J'attedais mpos = -1 et pos = 0
    et avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		mpos = wsChunk.find( L"OFF or +APC or ");
    		pos = wsChunk.find( L"+APC or ");
    avec la donnée wsChunk = {", either OFF or +APC or +DEM "}
    J'attendais mpos = 10 et j'obtiens mpos = -1
    qui m'aidera sera :ccool;

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    wsChunk est une std::wstring?
    Je suppose que le contenu que tu indiques est ce que te donne le debugger pile sur la ligne de l'appel à find()?
    Le code n'est pas multi-threadé, au moins?

    PS: Dans le second cas, mpos devrait être 9, pas 10.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Je na sais pas
    Je na sais pas si le code est multi threadé Je pense que oui pour les affichage mais pas pour le code
    wsChunk est bien une std::wstring
    c'est bien ce que donne le déboguer sur la ligne

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Vérifie la longueur indiquée pour la chaîne, des fois qu'il y ait un caractère invisible (d'un autre côté, ça n'explique pas le premier résultat...).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Autre chose: S'agit-il de chaînes sur lesquelles tu obtiens, à un moment ou un autre, un pointeur non-const?
    Car si oui, "all bets are off" et je ne réponds plus de rien.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut
    J'ai des comportement plus précis:
    quand je passe sur mpos j'ai la valeur mpos = -1
    quand je passe sur pos j'ai la valeur pos = 16 et mpos = 16
    comment se fait il que le resultat de pos se reporte sur la valeur de mpos
    j'ai essayé d'inverser les instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		pos = wsChunk.find( L"+APC or ");
    		mpos = wsChunk.find( L"or +APC or ");
    a l'entrée pos et mpos ont la valeur -1
    quand je passe sur pos j'ai pos = 16 ce qui est cohérent
    quant je passe sur mpos j'ai mpos = 16 pou 13 attendu
    avec la valeur wsChunk = {", either OFF or +APC or +DEM "}

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <string>
     
    #include <stdio.h>
     
     
    using std::wstring;
     
     
    int main(int argc, char** argv)
    {
        std::wstring wsChunk = L", either OFF or +APC or +DEM ";
     
        std::wstring::size_type pos = wsChunk.find( L"+APC or ");
        std::wstring::size_type mpos = wsChunk.find( L"or +APC or ");
     
        printf("%d, %d\n", pos, mpos); // 16, 13
     
        wsChunk = L"+APC or ";
     
        pos = wsChunk.find( L"+APC or ");
        mpos = wsChunk.find( L"or +APC or ");
     
     
        printf("%d, %d\n", pos, mpos); // 0, -1
     
        if (mpos == std::wstring::npos) {
            printf("No found: \"or +APC or \"\n");
        }
     
        wsChunk = L", either OFF or +APC or +DEM ";
     
        pos = wsChunk.find( L"+APC or ");
        mpos = wsChunk.find( L"OFF or +APC or ");
     
        printf("%d, %d\n", pos, mpos); // 16, 9
     
        return 0;
    }

  8. #8
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut La solution
    J'ai remplacé mpos par npos, et tout est rentré dans l'ordre

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Mais npos est une constante valant ((size_t)-1)!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Je vous donne
    Je vous donne les déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       int										pos;
       int										npos;
       int										mpos;

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Apparemment, j'ai confondu avec string::npos. Mais néanmoins, je déconseillerais d'utiliser ce nom de variable, ne serait-ce que pour éviter d'autres confusions.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Ok
    Je vais le faire.
    Je l'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       int										Step;
       int										pos;
       int										pos1;
       int										pos2;

  13. #13
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut Je reviens et je détaille la soulution
    J'ai du étendre l'interface pour prendre en compte le besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		pos = wsChunk.find( L"+APC or ");
    		pos1 = wsChunk.find( L"or +APC or ");
    		pos2 = wsChunk.find( L"door");
    avec cette implémentation j'ai pos = 16 et pos2 = 16 ce qui est incohérent
    j'ai donc modifié les variables por tourner ce problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		pos = wsChunk.find( L"+APC or ");
    		pos1 = wsChunk.find( L"or +APC or ");
    		pos4 = wsChunk.find( L"door");
    ce qui semble marcher.

  14. #14
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut il y a une autre incohérence qui résiste
    Bonjour
    il y a une autre incohérence qui résiste
    je vous met le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    				wsNewWord = (wchar_t*)pWord->wsWord.c_str();
    				b3 = wcscmp( wsNewWord, L"or");
    avec les valeurs suivantes :
    pWord->wsWord = {"closure"}
    wsNewWord = 0x07CABBC8 "closure"
    b3 = true ce qui est incohérent
    J'ai essayé avec b5: même résultat

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    1. QU'EST-CE QUE C'EST QUE CE CAST EN POINTEUR NON-const!!
    2. wcscmp() n'est pas String::Equals. Cette fonction ne retourne pas true ou false, mais une valeur pouvant être positive, négative ou nulle.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut On converge
    merci Medinoc
    je met le code qui marche mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    				wchar_t* wsNewWord = (wchar_t*)pWord->wsWord.c_str();
    				pos5 = wcscmp( wsNewWord, L",");
    				b1 = pWord->POS == POS_STOPMARK;
    				wsNewWord = (wchar_t*)pWord->wsWord.c_str();
    				pos3 = wcscmp( wsNewWord, L"or");
    				if( pos5 != -1)
    					bVirgulePosee = true;
    				if( pos5 != -1 || b1 || pos3 != -1)
    dans la phrase wsProposition {"The Ignition Subsystem Ignition Key or PASE has 3 states , either OFF or +APC or +DEM . "}
    mais avec la valeur wsNewWord = 0x07B196D0 "PASE"
    je récupère pos5 = 1 ce qui est incohérent

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    cf. mon post plus haut.

    Je ne répondrai plus aux autres erreurs tant que je verrai ce genre de cast.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut La Solution que j'ai fait
    bonjour,
    J'ai mis un bool initialisé quand il le faut pour doubler la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    				wsNewWord = (wchar_t*)pWord->wsWord.c_str();
    				b1 = pWord->POS == POS_STOPMARK;
    				wsNewWord = (wchar_t*)pWord->wsWord.c_str();
    				pos6 = wcscmp( wsNewWord, L",");
    				b0 = ( pos6 != -1 && bWisComma == true);
    				pos3 = wcscmp( wsNewWord, L"or");
    				b2 = ( pos3 != -1 && bWisPivot == true);

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ce code contient toujours des erreurs (ne serait-ce que des erreurs sémantiques) mais... voir plus haut.

    C'est comme Experts Exchange, il faut payer pour avoir la réponse complète... :p
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22
  2. DBCC SQLPERF ( LOGSPACE ) Interprétation des résultats
    Par Labienus dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/07/2004, 15h50
  3. Grouper et concatener des résultats
    Par Koo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/07/2004, 10h09
  4. Select, union, éliminer des résultats.
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/06/2004, 09h42
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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