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 :

find_first_of("/"); probléme de recupuration d'une chaine de caractére dans une ligne


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut find_first_of("/"); probléme de recupuration d'une chaine de caractére dans une ligne
    salut, svp si quelqu'un peux m'aidé, pour récupuré une chaine de caracté dans une ligne, le probléme c'est qu'il ya des critére

    exemple de la chaine de caractére du fichier d'entré:

    FT;4249;D;RFRPAD8/A8;2063à2093

    je fais le test sur le caractére "/" je donne la position du debut de la chaine mais mon programme ne trouve pa le slach si je mit :

    std::string sousligne1=ligne.substr(pos2+1,pos);
    resultat que j'obtient aprés execution:
    RFRPAD8/A8;2063à2093
    RFRPAD8/A8;2063à2093


    sinon pour qu'il reconnais le "/" je doit donné la position depui le debut de la ligne :

    std::string sousligne1=ligne.substr(0,pos);
    resultat que j'obtient aprés execution:

    FT;4249;D;RFRPAD8
    A8;2063à2093

    le resultat que je veux obtenir dans le fichier de sortie:

    RFRPAD8
    RFRPAA8

    voici le code :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #include <string>
    #include <fstream>
    #include <iostream>
    using namespace std;
    void main()
    {
        ifstream fichier("proto.txt");
      ofstream h("test.txt");
     
        if (fichier)
        {
     
      std::string ligne;
     
     
            while (getline(fichier,ligne))
            {
     
     
       // 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;
     
     
       size_t pos=ligne.find_first_of("/");
     
       std::string sousligne1=ligne.substr(pos2+1,pos);
     
       std::string sousligne2=ligne.substr(pos+1);
     
       std::string sousligne3=sousligne1.substr(0,sousligne1.size()-2).append(sousligne2);
     
     
        if (sousligne1.compare(sousligne2))
        { 
         h<<"CDFX1"<< sousligne1 << "\n" <<"CDFX2"<< sousligne3 << std::endl; 
        } 
        else 
        { 
         h <<"CDFX"<< ligne.substr(pos2+1,pos3-pos2-1) << std::endl; 
        }
      }
     }
     
        fichier.close();
     h.close();
    }

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

    Avant toute chose, le main doit être de type int.

    Sinon, le code est un peu confus, je pense qu'il y a plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Recherche de '/' 
    size_t posSlash = ligne.find("/");
     
    // Recherche du dernier ';' avant le '/'
    size_t posDot = ligne.rfind(";", posSlash);
     
    // Extraction de la sous chaine
    std::string sousligne1 = ligne.substr(posDot, posSlash-posDot);
    Au passage
    string::find_first_of est identique à string::find s'il n'y a qu'un caractère en paramètre.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    bein voila j'ai esséyé de modifier le code mais j'obtien tjr ce resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sousligne1 : RFRPAD8
    sousligne2 : A8;2063à2093
    souligne3 : RFRPAA8
    le resultat que je désir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sousligne1 : RFRPAD8
    sousligne2 : A8
    souligne3 : RFRPAA8
    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 !!

    voici le code :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #include <string>
    #include <fstream>
    #include <iostream>
    using namespace std;
    void main()
    {
        ifstream fichier("proto.txt");
      ofstream h("test.txt");
     
        if (fichier)
        {
     
      std::string ligne;
     
     
            while (getline(fichier,ligne))
            {
     
     
       // 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;
     
     
       size_t pos=ligne.find_first_of("/");
     
       std::string sousligne1=ligne.substr(0,pos);
     
       std::string sousligne2=ligne.substr(pos+1);
     
       std::string sousligne3=sousligne1.substr(0,sousligne1.size()-2).append(sousligne2);
     
     
        if (sousligne1.substr(pos2+1,pos3-pos2-1).compare(sousligne2.substr(0,pos0)))
        { 
         h<<"sousligne1 : "<< sousligne1.substr(pos2+1,pos3-pos2-1) <<"\n"<<"sousligne2 : "<< sousligne2.substr(0,pos0)<< "\n" <<"souligne3 : "<< sousligne3.substr(pos2+1,pos3-pos2-4) << std::endl; 
        } 
        else 
        { 
         h <<"CDFX : "<< ligne.substr(pos2+1,pos3-pos2-1) << std::endl; 
        }
      }
     }
     
        fichier.close();
     h.close();
    }

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut re
    j'ai esséyé avec le code que vous m'avez proposé mais ça revient au meme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Recherche de '/' 
    size_t posSlash = ligne.find("/");
     
    // Recherche du dernier ';' avant le '/'
    size_t posDot = ligne.rfind(";", posSlash);
     
    // Extraction de la sous chaine
    std::string sousligne1 = ligne.substr(posDot, posSlash-posDot);

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Il y a des choses pas net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Position du premier ';' dans ligne
    size_t pos0 = ligne.find_first_of(";");
    //Position du premier '/' dans ligne
    size_t pos = ligne.find_first_of("/");
     
    // création de sousligne2
    std::string sousligne2 = ligne.substr(pos + 1);
     
    // ici ça coince : on coupe sousligne2 en fonction de la position 
    // d'un caractère dans ligne... 
    "sousligne2 : " << sousligne2.substr(0, pos0) ;
    Essayez avec ça:

    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
    #include <string>
    #include <fstream>
    #include <iostream>
    using namespace std;
    int main()
    {
        std::string ligne = "FT;4249;D;RFRPAD8/A8;2063à2093";
     
        // while (getline(fichier,ligne))
        {
    	// Recherche de '/' 
    	size_t posSlash = ligne.find("/");
     
    	// Recherche du dernier ';' avant le '/'
    	size_t posDot = ligne.rfind(";", posSlash);
     
    	// Recherche du premier ';' apres le '/'
    	size_t posDot_2 = ligne.find(";", posSlash);
     
    	// Extraction de la sous chaine
    	std::string sousligne1 = ligne.substr(posDot+1, posSlash - posDot-1);
    	std::string sousligne2 =
    	    ligne.substr(posSlash+1, posDot_2 - posSlash-1);
     
    	cout << sousligne1 << endl << sousligne2 << endl;
     
        }
     
        return 0;
    }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2012, 15h50
  2. Réponses: 2
    Dernier message: 26/11/2005, 14h44
  3. Récupérer une chaine de caractère dans une page
    Par BrunS dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2005, 15h28
  4. [String]Recherche d'une chaine de caractères dans une autre
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 29/07/2004, 12h51
  5. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 17h35

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