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

Discussion :

Lire et écrire des colonnes de chiffres

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut Lire et écrire des colonnes de chiffres
    Bonjour à tous !

    Excusez-moi de vous déranger, j'avais simplement 3 petites questions toutes simples à vous poser :

    1) Mon but est de lire 3 colonnes de chiffres sur un fichier .txt et de les réécrire sur un autre fichier .txt (ça n'a aucun intérêt mais c'est juste pour comprendre).
    Voilà mon 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
     
    # include <iostream>
    # include <fstream>
    # include <stdlib.h>
    # include <string>
     
    using namespace std;
     
     
    int main()
    {
     
        int const nombreLignes(5);
        int tab1[nombreLignes];
        int tab2[nombreLignes];
        int tab3[nombreLignes];
     
     
        ifstream fichier1("donnees.txt", ios::in); // lecture du fichier : je stocke les chiffres sous la forme de tableaux
     
        for (int i=0 ; i<nombreLignes ;++i)
        { fichier1 >> tab1[i] >> tab2[i] >> tab3[i];
       fichier1.close(); }
     
     
     
        ofstream fichier2 ("donnees1.txt" , ios :: out) ; // constitution du fichier : je réécris les chiffres stockés
     
            for (int i=0 ; i<nombreLignes ;++i)
            { fichier2 << tab1[i] << tab2[i] << tab3[i] << "\n" << endl ;
    fichier2.close(); }
     
     
     
    return 0;
    }
    En fait tout marche bien sauf que je n'ai que la première ligne qui s'affiche : je ne lis que les 3 premiers nombres.



    2) En plus j'aimerais bien lire un fichier csv suivant le même principe et recopier les nombres sur un txt. Sur le csv, les nombres sont séparés par des ";".
    Mon code est donc le suivant :


    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 <iostream>
    # include <fstream>
    # include <stdlib.h>
    # include <string>
     
    using namespace std;
     
     
    int main()
    {
     
        int const nombreLignes(5);
        int tab1[nombreLignes];
        int tab2[nombreLignes];
        int tab3[nombreLignes];
     
     
        ifstream fichier1("donnees.txt", ios::in); // lecture du fichier : je stocke les chiffres sous la forme de tableaux
     
        for (int i=0 ; i<nombreLignes ;++i)
        { fichier1 >> tab1[i] >> ";" >> tab2[i] >> ";" >> tab3[i];
       fichier1.close(); }
     
     
     
        ofstream fichier2 ("donnees1.txt" , ios :: out) ; // constitution du fichier : je réécris les chiffres stockés
     
            for (int i=0 ; i<nombreLignes ;++i)
            { fichier2 << tab1[i] << tab2[i] << tab3[i] << "\n" << endl ;
    fichier2.close(); }
     
     
     
    return 0;
    }

    Mais ça ne marche pas...



    3) Enfin, toujours dans le même genre, je voudrais ne lire que la première colonne et la quatrième.


    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
    # include <iostream>
    # include <fstream>
    # include <stdlib.h>
    # include <string>
     
    using namespace std;
     
     
    int main()
    {
     
        int const nombreLignes(5);
        int tab1[nombreLignes];
        int tab2[nombreLignes];
     
        int entier
     
     
        ifstream fichier1("donnees.txt", ios::in); // lecture du fichier : je stocke les chiffres sous la forme de tableaux
     
         for (int i=0 ; i<nombreLignes ;++i)
         { fichier1 >> tab1[i] >> entier >> entier >> tab2[i];
         fichier1.close(); }
     
     
     
        ofstream fichier2 ("donnees1.txt" , ios :: out) ; // constitution du fichier : je réécris les chiffres stockés
     
         for (int i=0 ; i<nombreLignes ;++i)
         { fichier2 << tab1[i] << " " << tab2[i] << "\n" << endl ;
         fichier2.close(); }
     
     
     
    return 0;
    }
    et ça marche pas non plus.


    Savez-vous comment faire ?
    Merci beaucoup en tout cas.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 316
    Par défaut re réeriture fichier
    Bonsoir,

    Ceci est hors sujet car ce n'est pas du qt mais je vais t'aider quand même.

    Moi je ferais comme cela :
    fgets pour lire le fichier source ligne par ligne
    strtok sur chaque ligne afin de la décomposer en lexèmes
    réécriture de la chaine en remplaçant le séparateur source par le séparateur destination (ex : fichier tabulation séparateur \t séparateur destination :" ;" pour csv)
    Pour ce cas je ne m'occupe pas du nombre de colonnes, je recopie tout le fichier vers un second.
    Si tu souhaites ne prendre que les 3 premières colonnes su les x présentes, il suffit d’exécuter une boucle avec le nombre de colonnes souhaitées.
    A ce stade,reste à vérifier si les valeurs récupérés sont bien des chiffres si cela est nécessaire, pour cela conversion des lexèmes du format chaine vers entier avec atoi()par exemple.

    Sinon =dans Qt, Qfile te permets d'avoir une gestion objet complète des fichiers tu pourrait faire par exemple monfichier.readline pour lire une ligne du fichier après avoir instancié l'objet bien entendu.
    En espérant t'avoir aidé
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Lire et écrire des fichiers textes colonnés
    Par coolpix77 dans le forum Général Python
    Réponses: 5
    Dernier message: 02/09/2014, 15h59
  2. Réponses: 1
    Dernier message: 06/09/2012, 21h53
  3. Réponses: 4
    Dernier message: 18/12/2007, 10h56
  4. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48
  5. Réponses: 9
    Dernier message: 05/04/2005, 09h39

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