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 :

Fichier texte en double lecture


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Par défaut Fichier texte en double lecture
    Bonjour à tous,

    J'ai un fichier texte de plusieurs millions de lignes
    constitué de 3 champs (nom abscisse ordonnée) représentant des points.

    Exemple d'une ligne donnée : AA35 0.071426548 0.3711554775

    J'essaye de faire 2 boucles imbriquées (for ...) afin de faire des opérations sur tout les couples de points.
    Une boucle for permet bien de lister tout les points et leurs coordonnées mais une double boucle ne permet pas de faire des opérations sur ces points.

    Merci pour votre aide.

    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
    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
    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <string>
     
    struct Data1 
    {
        std::string name1_{};
        double x_{};
    };
     
    struct Data2 
    {
        std::string name2_{};
        double y_{};
    };
     
    int main() 
    {
         int i;
         double x3;
         double y3;
     
        std::ifstream file("XY.txt");
        if(!file) 
        {
              std::cerr << "file not found" << std::endl;
              return 1;
        }
     
        std::vector<Data1> datas1;
        Data1 data1;
     
        std::vector<Data2> datas2;
        Data2 data2;
     
        while(file >> data1.x_) 
        {
               datas1.push_back(data1);
        }
     
        while(file >> data2.y_) 
        {
               datas2.push_back(data2);
        }
     
    for (auto const& data1: datas1)
    {
    for (auto const& data2: datas2)
    {
            std::cout << data1.x1_  << data1.y1_  << std::endl; 
            std::cout << data2.x2_  << data2.y2_  << std::endl; 
     
           x3 = data1.x1_ + data2.x2_;   
           y3 = data1.y1_ + data2.y2_;
     
            printf("x3 = %f y3 = %f \n",x3,y3);    	// Pas de résultat ...
    }
    }
     
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    je n'ai pas compris toute ton histoire mais ce code n'a aucune chance de compiler. Data1 n'a pas de champ x1_ ni y1_, et Data2 n'a pas de x2_ ni y2_.
    Que compiles-tu donc ?

    De plus, tes structures sont totalement identiques et tu gagnerais sûrement à n'en avoir qu'une.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Par défaut
    Bonjour,
    J'ai corrigé les structures avec les X1_ Y1_ et X2_ Y2_. Je ne vois pas comment utiliser seulement une seule structure.
    Une simple boucle (for i) me permet bien de visualiser tout les points Pi Xi_ Yi_.
    Avec une double boucle je devrait voir Pi Xi_ Yi_ Pj Xj_ Yj_ mais je n'ai rien en sortie !

    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
    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <string>
     
    struct Data1 
    {
        std::string name1_{};
        double x1_{};
        double y1_{};
    }
     
    struct Data2 
    {
        std::string name2_{};
        double x2_{};
        double y2_{};
    }
     
    int main() 
    {
         int i;
         int j;
         double x3;
         double y3;
     
        std::ifstream file("XY.txt");
        if(!file) 
        {
              std::cerr << "file not found" << std::endl;
              return 1;
        }
     
        std::vector<Data1> datas1;
        Data1 data1;
     
        std::vector<Data2> datas2;
        Data2 data2;
     
        while(file >> data1.name1_ >> data1.x1_ >> data1.y1_) 
        {
               datas1.push_back(data1);
        }
     
        while(file >> data2.name2_ >> data2.x2_ >> data2.y2_) 
        {
               datas2.push_back(data2);
        }
     
        for ( std::size_t i = 0 ; i < datas1.size() ; ++i ) 
       {
        for ( std::size_t j = 0 ; j < datas2.size() ; ++j ) 
       {
                   std::cout << datas1[i].name1_ << " " << datas1[i].x1_ << " " << datas1[i].y1_ << "\n";	// rien en sortie
                   std::cout << datas2[j].name2_ << " " << datas2[j].x2_ << " " << datas2[j].y2_ << "\n";     	// rien en sortie
       }    
       }
     
    }

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

    Tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Data
    {
        std::string name_{};
        double x_{};
        double y_{};
    }
    Suivi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        std::vector<Data> datas1;
        Data data1;
     
        std::vector<Data> datas2;
        Data data2;
    et de l'utilisation des champs name_, x_ et y_ (auquel l'underscore de fin est de trop AMHA, ce sont des champs publics).

    Sinon, pose-toi la question suivante : quelle est la condition de sortie de la première boucle while(file >> data1.name1_ >> data1.x1_ >> data1.y1_) ?

    Remarque : tes déclarations lignes 22-25 sont inutiles.

Discussions similaires

  1. Lecture fichier texte : Derniere ligne en double(probleme)
    Par Ephemarius dans le forum Débuter
    Réponses: 2
    Dernier message: 05/10/2014, 00h13
  2. Réponses: 10
    Dernier message: 16/02/2010, 11h25
  3. Lecture d'un fichier Texte
    Par jcharles dans le forum Bases de données
    Réponses: 8
    Dernier message: 27/10/2004, 14h58
  4. lecture de fichier texte
    Par prorider dans le forum C
    Réponses: 36
    Dernier message: 08/09/2004, 20h55
  5. Stockage de données & lecture d'un fichier texte
    Par petitours dans le forum C++Builder
    Réponses: 6
    Dernier message: 13/03/2004, 14h05

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