C++ manipulation de fichier
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

C++ manipulation de fichier



  1. #1
    invite2781af1c

    C++ manipulation de fichier


    ------

    Bonjour !!!

    Voilà mon soucis:

    J'ai un fichier .txt où se trouve une liste du même genre que celle-ci:

    France $ Paris $ 3
    Pays-Bas $ Amsterdam $ 7
    Belgique $ Bruxelles $ 5
    Allemagne $ Berlin $ 2
    ...

    En fait, j'aimerais que mon programme ne m'affiche par exemple que les noms de pays ou que les capitales.

    Pour n'avoir que les pays, j'ai essayé en prenant la méthode "substr" et de ne garder que de 0 au premier $ mais le soucis est que dans la parenthese on ne concidere que en "char" donc $ est vu comme la 36eme lettre et non pas comme le symbole $

    ...
    ...
    if (fichier)
    {
    std::string ligne;
    while (std::getline(fichier, ligne ) )
    {
    std::cout << ligne.substr(0, '$') << std::endl;
    }
    ...

    Comment dois je m'y prendre pour qu'a chaque ligne, il ne me donne que les lettres jusqu'au premier $ ?

    MERCI D'AVANCE!

    -----

  2. #2
    Jack
    Modérateur

    Re : C++ manipulation de fichier

    et un truc du genre:

    string ville, pays:
    int num;
    char bidon;
    ...
    cin >> pays >> bidon >> ville >> bidon >> num >> bidon;

    A+

  3. #3
    invite2781af1c

    Re : C++ manipulation de fichier

    En fait je ne cherche pas à insérer par moi même " Pays $ Capitale $ Chiffre "
    mais bien qu'apparaisse sur mon écran par exemple:

    Paris
    Amsterdam
    Bruxelles
    Berlin

    et ca d'après un fichier .txt où est noté toute une liste de ce type là:

    France $ Paris $ 3
    Pays-Bas $ Amsterdam $ 7
    Belgique $ Bruxelles $ 5
    Allemagne $ Berlin $ 2

    Je ne sais pas si je m'exprime bien. J'ai un peu de mal

  4. #4
    Jack
    Modérateur

    Re : C++ manipulation de fichier

    non, non, c'est moi qui déraille. Je voulais dire

    Code:
    fichier >> pays >> bidon >> ville >> bidon >>  num >> bidon;
    A+

  5. A voir en vidéo sur Futura
  6. #5
    invite9a567448

    Re : C++ manipulation de fichier

    Bonjour.

    Si si , c'est très bien exprimé.
    Chaque colonne de donnée est séparée par un $

    c'est un genre de fichier csv.
    Soit il y a des fonctions toutes faites pour ce type de données en C++ comme dans tous les languages soit il faut lire les données
    ligne par ligne.

    On charge la 1ere ligne
    on lit lettre par lettre qu'on copie dans une variable si on veut le nom du pays.
    jusqu'a lire un signe $
    A ce moment la variable contient le 1er champ le nom du pays

    Comme on veut la colonne suivante on efface et on continue jusqu'au 2éme dollard

    on en fait ce que bon nous semble et on passe a la ligne suivante.


    C'est tout simple.
    C'est ce que font les fonctions toutes faites en plus perfactionné car ces fonctions extraient toutes les colonnes en utilisant le signe voulu de séparateur (un ";" souvent)
    Pour un débutant, il est plus instructif de faire la fonction soit même, on apprend la manipulation des données.

    Berard.

  7. #6
    Jack
    Modérateur

    Re : C++ manipulation de fichier

    on lit lettre par lettre qu'on copie dans une variable si on veut le nom du pays.
    Pourquoi s'embêter puisqu'il y a des espaces entre les champs: l'opérateur >> doit convenir.

    A+

  8. #7
    invite9a567448

    Re : C++ manipulation de fichier

    Re.

    je ne suis pas C++ je suis Delphi.(mais il y pas de différences de fond)

    Les opérateurs C++ certainement.
    Mais rien ne garanti les espaces, ce qui est avéré ce sont les "$".
    Bon y a que le n° de caractère qui change.
    Mais il doit bien y avoir des primitives csv en C++ aussi.

    Mais ce que je voulais expliquer a Gingerbread c'est la démarche de programmation.

    Sinon , un simple renvoi a la documentation du language suffirait, mais on est pas des monstres ...

    Berard.

  9. #8
    invite2781af1c

    Re : C++ manipulation de fichier

    Citation Envoyé par Berard-Landauer Voir le message
    On charge la 1ere ligne
    on lit lettre par lettre qu'on copie dans une variable si on veut le nom du pays.
    jusqu'a lire un signe $
    A ce moment la variable contient le 1er champ le nom du pays
    Merci pour ces explication

    J'ai réussi à faire apparaitre toutes les lignes comme ceci:

    Code:
    #include <fstream>
    #include <iostream>
    #include <string>
    
    using namespace std;
    int main()
    {
    ifstream fichier("document.txt");
    if (fichier)
                             {
                                   std::string ligne;
                                   
                                   while (std::getline(fichier, ligne ) )
                                   {
                                         std::cout << ligne << std::endl;
                                   }                             
                                   
                             }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Mais je n'arrive pas à trouver le bon code pour que ca s'arrete une fois arrivé au "$", retourner a la ligne et recommencer.

    Est-ce du au "getline" qui me restreint dans mes opérations?
    Ne devrais-je pas plutot utiliser la fonction "get"? Mais dans ce cas comment mon programme va-t-il savoir qu'il doit revenir a la ligne une fois le "$" trouvé ?

    (je ne sais pas ce qu'est le csv... )

    Merci d'avance pour vos réponses

  10. #9
    Jack
    Modérateur

    Re : C++ manipulation de fichier

    Tu as au moins essayé ce que je t'ai proposé?

    A+

  11. #10
    invite2781af1c

    Re : C++ manipulation de fichier

    Oui bien sur !
    J'ai essayé comme ceci :

    Code:
    #include <fstream>
    #include <iostream>
    #include <string>
    
    using namespace std;
    int main()
    {
    ifstream fichier("document.txt");
    if (fichier)
    
                             {
                                   string Capitale;
                                   char $;
                                   fichier >> Capitale >> $;
                                   td::cout << Capitale << std::endl;
                             }                             
                                   
                             
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Le soucis avec cette méthode c'est que ca ne fonctionne pas quand j'ai des villes a nom composé... :Z

  12. #11
    invite9a567448

    Re : C++ manipulation de fichier

    Citation Envoyé par Gingerbread Voir le message
    Merci pour ces explication

    J'ai réussi à faire apparaitre toutes les lignes Ne devrais-je pas plutot utiliser la fonction "get"? Mais dans ce cas comment mon programme va-t-il savoir qu'il doit revenir a la ligne une fois le "$" trouvé ?

    (je ne sais pas ce qu'est le csv... )

    Merci d'avance pour vos réponses
    Salut
    Avec getline tu charge la ligne c'est a dire tous les caractères jusqu' au signe fin de ligne
    Chr (10) ou chr(13) LF et CR
    Pour lire les caractére il doit y avoir Getcar ou getchar. Ce doit être Getchar en C.
    Lire chaque caractère, comparer avec le "$"
    Traiter suivant le cas .
    Pour les CSV c'est une convention de formatage des fichiers texte pour les tableurs comme excel.
    http://fr.wikipedia.org/wiki/Comma-separated_values
    Les fonctions existent en PHP et Delphi , donc on doit les trouver en C++ , pas de raisons.
    Mais apprendre a dépouiller un texte lettre par lettre, c'est un très bon exercice.
    Ton programme saura ce qu'il doit faire quand il aura trouvé le "$" parce que tu va écrire ce qu'il doit faire alors.
    Code:
    if mon_char== "$" then etc
    C'est ce qui fait que c'est long de programmer, faut tout dire a la bouzine qui est bête comme ses pieds

    A plus
    Berard.

  13. #12
    Jack
    Modérateur

    Re : C++ manipulation de fichier

    Le soucis avec cette méthode c'est que ca ne fonctionne pas quand j'ai des villes a nom composé... :Z
    C'est exact.

    Une fois que tu a récupéré la ligne avec le getline, tu peux effectivement la scanner caractère par caractère comme le suggère Berard, mais tu peux également utiliser la méthode find qui appartient à la classe string. Tu rechercheras donc le caractère $ pour séparer les différents champs de ta ligne.

    A+

  14. #13
    invite9a567448

    Re : C++ manipulation de fichier

    Re.

    l'utilisation des fontions de l'objet String est surement plus pertinante que les fonctions de base genre getChar.
    Mais il me semble qu'avant de manipuler les objets, il est utile de savoir manipuler les données soi-même.
    Le souci didactique nécessite cette approche basique de la programmation pour les débutants.
    Pour l'objet String (et les autres en explorant le site) un tres bon tutoriel :

    http://cpp.developpez.com/faq/cpp/?page=strings

    Cordialement
    Berard.

  15. #14
    Jack
    Modérateur

    Re : C++ manipulation de fichier

    Tout à fait d'accord didactiquement parlant.

    Je me réfère juste au titre qui suggère l'utilisation du C++.

    A+

Discussions similaires

  1. Matlab Lecture de n fichier .txt et ecriture dans un fichier .xls
    Par invite24513ab6 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 26/07/2010, 10h12
  2. Fichier .doc dans fichier .pdf
    Par invite692c40a0 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 25/09/2008, 22h09
  3. Lire un fichier .BIN avec Matlab converti d'un fichier .WAV
    Par invite45d1502e dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 03/05/2008, 17h13
  4. amener fichier executif sans fichier source
    Par invite9848a956 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 03/03/2008, 18h55
  5. probleme d'ouverture d'in fichier ISO et d'un fichier RAR
    Par invitec35bc9ea dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 28/08/2006, 19h54
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...