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++ Discussion :

string dégénéré après substr()...


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 103
    Points : 60
    Points
    60
    Par défaut string dégénéré après substr()...
    Bonjour,

    Je suis actuellement entrain de coder une petite classe à l'instar du RessourceBundle de java (je sais que cela doit exister mais à défaut d'avoir trouver quelquechose rapidement...).

    Pour faire cela, je parcours le fichier et je découpe chaque ligne en deux en fonction de la position du caractère "=" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    size_t pos = ligne.find("=",0);
    if (pos != string::npos) {
                        string key       = ligne.substr(0,pos);
                        string value     = ligne.substr(pos+1,ligne.length());
                        cout << "Clé : " << key << " | Valeur : " << value << "*" << endl;
                        mapSection[currentSection][key] = value;
                    }
    En sortie ma chaine value est un peu pourrie. Par exemple à l'affichage dans la console Linux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * é : voipFileName | Valeur : /users/u1xyt/soap/nuts_soap_server/vip_ph.dat
    On retrouve l'étoile afficher dans la ligne "cout" affiché en début de ligne...
    J'avoue que je n'y comprend pas grand chose. J'ai essayé de changer ligne.length() par ligne.length()-1 ou -2 en penseant à un problème de fin de ligne mais sans succès...

    Si quelqu'un à une idée de l'origine du problème, un petit éclairage serait le bienvenue.

    Merci d'avance

  2. #2
    Membre confirmé Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Points : 488
    Points
    488
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string value = ligne.substr( pos+1,ligne.length() );
    Plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string value = ligne.substr( pos+1,ligne.length() - key.length() );
    Non ?
    L'itération est humaine; la récursion, divine.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    De toute façon si on veut aller jusqu'à la fin le dernier argument importe peu, ça fonctionnera même si on dépasse la taille de la chaîne. C'est d'ailleurs pour cela qu'il possède une valeur par défaut.

    Ton code semble correct, d'ailleurs les chaînes ont un contenu qui semble être ce que tu attends non ? Ton bug est vraiment bizarre, et je pense que ça vient d'ailleurs. Tu peux essayer d'écrire un code complet minimal qui reproduit le problème ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 103
    Points : 60
    Points
    60
    Par défaut
    Merci pour votre aide

    J'ai trouvé d'où venez le souci. Je travaille sous windows avec un montage samba d'une machine distante inux et j'ai édité le fichier .ini avec eclipse. Biensur il m'a mit des fins de ligne "dos" qui se sont retrouvé en fin de chaine.

    Voilà d'où venez le plantage : au decorticage un \r devait se retrouver en fin de ligne et poser problème un peu de partout (affichage et utilisation des chaines récupèrée).

    Sinon le code marche maintenant nickel.

    Si des gens sont interessé par mon petit RessourceBunde n'hésitez pas!

    Encore merci

Discussions similaires

  1. extraction string xsl problem substring/instr
    Par CouicCouic dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 28/12/2011, 03h28
  2. Couper une String juste aprés un mot
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/07/2010, 09h16
  3. Réponses: 2
    Dernier message: 14/11/2008, 11h28
  4. [PHP-JS] Réécrire un string lettre après lettre
    Par Andalor dans le forum Langage
    Réponses: 16
    Dernier message: 13/07/2006, 14h22
  5. string.substr() & string.split() ???
    Par BnA dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/03/2006, 15h27

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