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 :

c++ position de mot dans un .txt


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut c++ position de mot dans un .txt
    j'ai un fichier txt ou ya des informations que je veux metre dans un autre fichier mais pas toute, donc je veux choisir les chaine de caractére que je veux recopié.


    exemple :

    Code fichier de debart : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    4100 M RFRPAD8/A8 2063à2093 12361 
    2000 A RFRPAA8 2094à2124 52443

    Code resultat attendu : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    4100 RFRPAD8/A8 
    2000 RFRPAA8

    voici mon code mais c just pour recopié un fichier dans un autre

    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
    #include <string> 
    #include <fstream> 
    #include <iostream> 
    #include <string.h> 
    #include <fstream.h> 
    #include <iostream.h> 
     
     
    void main() 
    { 
    std::ofstream h("test.txt",ios ::out); 
     
    std::ifstream fichier( "proto.txt" ); 
     
    if ( fichier ) 
    { 
    std::string ligne; 
     
    while ( std::getline( fichier, ligne ) ) 
     
     
     
     
    { 
    h<< ligne <<std::endl; 
    } 
     
     
    } 
     
     
     
    fichier.close(); 
    h.close(); 
    }
    ma question c'est :
    est ce qu'il ya une façon pour choisir les chaire de caractére qu'on veux affiché, un truc comme donné la position de la chaine qu'on veux affiché.
    NB: j'ai cherché dans google mais je n'ai pas trouvé grand chose
    merçi d'avance

  2. #2
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    fichier de debart

    4100 M RFRPAD8/A8 2063à2093 12361
    2000 A RFRPAA8 2094à2124 52443

    resultat attendu :

    4100 12361 2063à2093 RFRPAD8/A8
    2000 52443 2094à21241 RFRPAA8

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Par défaut
    Bonjour,

    dans ton code, la ligne while ( std::getline( fichier, ligne ) ) me semble douteuse. a vérifier, mais tu pourrais peut-être faire fichier.getline(ligne, 256) par exemple.

    La classe string intègre un panel de fonctions te permettant de rechercher du texte (find, rfind, find_first_of...) que tu pourrais utiliser. Voici un lien pour les décrire : http://www.cplusplus.com/reference/string/string/.

    Sinon question bète, mais pourquoi ne pas écrire directement ton fichier dans le bon ordre ?

  4. #4
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    j'ai eséyé avec ce code mais j'ai un erruer quelque part !!

    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
    #include <string> 
    #include <fstream> 
    #include <iostream> 
    #include <string.h> 
    #include <fstream.h> 
    #include <iostream.h> 
     
     
    void main() 
    {
     
     
     
     
     std::ofstream h("test.txt",ios ::out); 
     
     std::ifstream fichier( "tab.csv" ); 
     
      if ( fichier ) 
     
      { std::istringstream stream1;
       std::string a,b,c,d,e;
     
       std::string ligne; 
       stream1.str(ligne); 
     
       while ( std::getline( fichier, ligne ) ) 
     
       { 
     
     
        h<<a<<" "<<d<<" "<<c<<" "<<b<<" "<<e<<std::endl;; 
     
       } 
     
     
      } 
     
     fichier.close(); 
     h.close(); 
    }

    maximus

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 20
    Par défaut
    ce sont des donnais que je doit saisir à partir d'un fichier > de 900 ligne et je doit prendr juste quelque champ du fechier initiale puis le metre dans un autre fichier

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 21
    Par défaut
    Tu n'es pas très clair sur ton problème. Dois-tu sélectionner certaines lignes, par rapport à leur numéro ? L'inversion et la sélection des champs est-elle toujours la même ?

    Ton code n'est pas très explicite non plus. J'ai essayé de te le reprendre ci-dessous, ne sachant pas trop où tu veux aller. Mais là tu auras au moins un truc qui compile et qui marche (le code prend les lignes du fichier tab.csv et inverse les champs dans test.txt)

    #include <ifstream>
    #include <ofstream>
    #include <string>
    void main()
    {
    std::ofstream fichier("test.txt");
    std::ifstream h( "tab.csv" );
    if (h.is_open())
    {
    std::string ch1, ch2, ch3, ch4, ch5;
    std::string ligne;

    while ( !h.eof() )
    {
    h >> ch1 >> ch2 >> ch3 >> ch4 >> ch5;
    fichier << ch1 << " "<< ch5 << " " << ch4 << " "<< ch3 << std::endl;
    }

    fichier.close();
    h.close();
    }
    }

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par grouff Voir le message
    Bonjour,

    dans ton code, la ligne while ( std::getline( fichier, ligne ) ) me semble douteuse. a vérifier, mais tu pourrais peut-être faire fichier.getline(ligne, 256) par exemple.

    La classe string intègre un panel de fonctions te permettant de rechercher du texte (find, rfind, find_first_of...) que tu pourrais utiliser. Voici un lien pour les décrire : http://www.cplusplus.com/reference/string/string/.

    Sinon question bète, mais pourquoi ne pas écrire directement ton fichier dans le bon ordre ?
    Non, quand tu veux t'assurer que ton fichier est correct, l'idéal est toujours de :
    1. Lire la ligne avec std::getline(file, chaine) (cf la FAQ qui traite du sujet)
    2. tenter la conversion de la chaine en autant de champs (de types différents) que ce à quoi tu t'attends.

    Effectivement, si tu as la certitude que chaque ligne de ton fichier sera correctement formaté - entre autre parce que les informations qu'il contient sont écrite selon un format donné par une application (éventuellement tierce) - tu peux essayer d'envisager de récupérer chaque champs séparément ,)
    Citation Envoyé par yanlou Voir le message
    ce sont des donnais que je doit saisir à partir d'un fichier > de 900 ligne et je doit prendr juste quelque champ du fechier initiale puis le metre dans un autre fichier
    Tu donnes toi même la réponse

    Il faut que tu transforme la ligne du fichier en autant de champs de données du type ad-hoc

    Ici, une première analyse du fichier source montre que tu as, dans l'ordre
    1. un entier
    2. un caractère
    3. une chaines de caractères
    4. une deuxième chaine de caractères composée (mais on peut estimer que cela n'a pas d'importance)
      • d'un entier
      • du caractère 'à'
      • d'un entier
    5. un dernier entier

    Une analyse du résultat escompté montre que, dans la question d'origine, tu souhaite obtenir, dans l'ordre
    1. (1)
    2. (5)

    Et et que dans la deuxième version, tu veux obtenir dans l'ordre
    1. (1)
    2. (5)
    3. (4)
    4. (3)

    Il "suffit" donc de passer la chaine lue dans une "moulinette" qui te permettra de récupérer les champs, puis d'envoyer ces champs, dans l'ordre souhaité, vers ton fichier de destination

    Ainsi le code serait fort proche de
    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
    int main()
    {
        /* le fichier source:  ouvert en lecture */
        std::ifstream ifs("proto.txt");
        /* le fichier de destination, ouvert en écriture 
         * (pas besoin de préciser std::out avec un ofstream ;) )
         */
        std::ofstream ofs("test.txt");
        /*création d'une chaine servant pour la lecture dans le fichier */
        std::string read;
        /* la boucle de lecture dans le fichier: tant que l'on arrive à lire
         * quelque chose, on va séparer la ligne en champs
         */
        while(std::getline(file, read))
        {
            /* pour convertir nos informations, nous allons utiliser la classe
             * de coonversion stringstream ;)
             */
            std::stringstream ss;
            /* que nous remplissons avec la chaine lue */
            ss<<read;
            /* Il nous faut maintenant des variables temporaires pour récupérer
             * les différents champs
             */
            size_t val1; /*pour (1) */
            char c; /* pour (2) */
            std::string str1; /* pour (3) */
            std::string str2; /* pour (4) */
            size_t val2; /* pour (5) */
            /* auxquelles nous donnons les valeurs issues du flux de conversion */
            ss>>val1>>c>>str1>>str2>>val2;
            /* "YAPUKA" envoyer les informations qui nous intéressent en la 
             * sortie
             */
            /* pour la première version du fichier de destination */
            ofs<<val1<<" "<<val2<<std::endl;
            /* pour la deuxième version */
            ofs<<val1<<" "<<val2<<" "<<str2<<" "<<str1<<std::endl;
        }
        /* et le tour est joué, on peut quitter l'application */
        return 0;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Changement de mots dans un txt
    Par oliv27400 dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/07/2010, 18h19
  2. [Batch] Batch pour ajouter un mot dans un txt
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 20/09/2009, 11h25
  3. compter le nombre de meme mot dans un .txt
    Par Gogad dans le forum Général Python
    Réponses: 11
    Dernier message: 04/05/2009, 00h50
  4. Sélection de certains mots dans un .txt
    Par Dorhken dans le forum VB 6 et antérieur
    Réponses: 27
    Dernier message: 09/12/2007, 17h51
  5. Faire un variable à partir d'un mot dans un txt
    Par Apophis03 dans le forum C
    Réponses: 16
    Dernier message: 21/12/2005, 15h53

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