// Récupération 1er champ et écriture dans le fichier
size_t pos0=ligne.find_first_of(";");
//h << ligne.substr(0,pos0) << " " << endl;
//Récupération 2e champ et écriture dans le fichier
size_t pos1=ligne.find_first_of(";",pos0+1);
//h << ligne.substr(pos0+1,pos1-pos0-1) <<std::endl;
// Récupération 3e champ et écriture dans le fichier
size_t pos2=ligne.find_first_of(";",pos1+1);
//h << ligne.substr(pos1+1,pos2-pos1-1) <<std::endl;
// Récupération 4e champ et écriture dans le fichier
size_t pos3=ligne.find_first_of(";",pos2+1);
//h << ligne.substr(pos2+1,pos3-pos2-1) << std::endl;
// Récupération 5e champ et écriture dans le fichier
size_t pos4=ligne.find_first_of(";",pos3+1);
//h << ligne.substr(pos3+1,pos3-pos2-1) <<std::endl;
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 10 juil. 2008 à 13:36
Salut,
Dans la 1ère partie de ton code, tu recherches les occurrences du slash, ce qui implique que tu déplaces le curseur sur la chaine. Ensuite, tu recherche l'occurrence du point-virgule. Or, ton curseur s'étant déplacé, la fonction ne le trouvera pas...
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 10 juil. 2008 à 15:12
Mais je sais pas moi, tu change tout le temps le fonctionnement
Je t'explique le principe de l'objet string et de la fonction find_first_of():
En gros, il faut voir l'objet string comme une encapsulation d'un tableau de caractères et d'un curseur. Quand tu fais appel à la fonction find_first_of (qui veut dire "recherche de la 1ère occurence"), tu déplaces un curseur le long du tableau, jusqu'à trouver le caractère (ou la sous-chaine) recherché(e). En schématisant, l'algo de cette fonction est le suivant:
- (par défaut, le curseur est au début du tableau)
- tant que caractère pointé par curseur différente du caractère recherché et qu'on a pas tout parcouru
- avancer le curseur d'une case
- on retourne la position courante du curseur (que l'on a appelée "pos" dans le code)
Tu vois le principe? Tu remarqueras que la position du curseur n'a pas été ré-initialisé. Du coup, lors du prochain appel, la recherche démarrera à la position courante du curseur.
Maintenant un exemple concret.
Imagines que dans ta string, tu aies "RFRPAD8/A8;2063à2093".
Tu appelles la fonction find_first_of(";").
D'après ce que je t'ai raconté, en sortie de fonction, ton curseur pointera sur la 11e case du tableau.
Maintenant, si tu appelle la fonction find_first_of("/"), le curseur étant à la position 11, la fonction ne trouvera pas le caractère souhaité; Elle te retournera donc la position de la fin du tableau.
Est-ce que tu as compris mon explication? Est-ce que tu y voies un peu plus clair?
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
j'ai esséyé de prendr la pos avec les ";"
ça marché pour la sousligne1 et la sousligne3, mais pour la sousligne2 ça marche pas et je vois pa ou est l'erreur !!
// Récupération 1er champ et écriture dans le fichier
size_t pos0=ligne.find_first_of(";");
//h << ligne.substr(0,pos0) << " " << endl;
//Récupération 2e champ et écriture dans le fichier
size_t pos1=ligne.find_first_of(";",pos0+1);
//h << ligne.substr(pos0+1,pos1-pos0-1) <<std::endl;
// Récupération 3e champ et écriture dans le fichier
size_t pos2=ligne.find_first_of(";",pos1+1);
//h << ligne.substr(pos1+1,pos2-pos1-1) <<std::endl;
// Récupération 4e champ et écriture dans le fichier
size_t pos3=ligne.find_first_of(";",pos2+1);
//h << ligne.substr(pos2+1,pos3-pos2-1) << std::endl;
// Récupération 5e champ et écriture dans le fichier
size_t pos4=ligne.find_first_of(";",pos3+1);
//h << ligne.substr(pos3+1,pos3-pos2-1) <<std::endl;