Partage
  • Partager sur Facebook
  • Partager sur Twitter

Manière efficace de lire un fichier dans une structure

Sujet résolu
    14 août 2008 à 3:36:42

    Je veux connaître la manière la plus efficace (la plus rapide... si possible) de lire un fichier TXT en C++ dans une structure.

    Exemple:

    struct produit
    {
    char champ1[10];
    char champ2[25];
    char champ3[1];
    char champ4[4];
    char finl[2]; // CR/LF (0x0D/0x0A)
    };

    A noter qu'une ligne lu aura 42 caractères (incluant le Carriage Return et le Line Feed pour chacune des lignes)

    MERCI !
    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2008 à 4:01:38

      Lâche les tableaux de char, et utilise des std::string à la place. Et puis, pour lire un fichier, rien de mieux qu'un std::ifstream...

      std::ifstream ifs("fichier.txt");
      std::string ligne;
      std::getline(ifs, ligne);
      // ligne contient maintenant la ligne complète, CR/LF exclus
      

      Et ainsi de suite.
      • Partager sur Facebook
      • Partager sur Twitter
        14 août 2008 à 4:10:01

        Si tu a beaucoup besoin de faire des allers retours entre les fichiers et tes structures/classes dans ton programme, renseigne toi sur la sérialisation et en particulier Boost.Serialize, cf un sujet récent de ce forum C++ (comment sauvegarder en POO, quelque chose de ce genre).
        • Partager sur Facebook
        • Partager sur Twitter
          14 août 2008 à 10:13:54

          Tu peux aller voir ici.
          http://www.parashift.com/c++-faq-lite/serialization.html#faq-36.6
          • Partager sur Facebook
          • Partager sur Twitter
            14 août 2008 à 11:30:00

            Citation : coussini

            Je veux connaître la manière la plus efficace (la plus rapide... si possible) de lire un fichier TXT en C++ dans une structure.

            Exemple:

            struct produit
            {
            char champ1[10];
            char champ2[25];
            char champ3[1];
            char champ4[4];
            char finl[2]; // CR/LF (0x0D/0x0A)
            };



            Pour quoi programmer en c++ si c'est pour utiliser des structures, ne penses-tu pas qu'une classe serait l'idéal? au moins tu pourras mettre des methodes dedans.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              14 août 2008 à 11:31:05

              Citation : uknow

              Pour quoi programmer en c++ si c'est pour utiliser des structures, ne penses-tu pas qu'une classe serait l'idéal? au moins tu pourras mettre des methodes dedans.

              Ce que tu dit est faux. Vas lire les mots-clefs. ;)
              • Partager sur Facebook
              • Partager sur Twitter
                14 août 2008 à 11:37:18

                Citation : Hiura

                Ce que tu dit est faux. Vas lire les mots-clefs. ;)



                Qu'est-ce qui est faux? le fait de pouvoir mettre des methodes dans une classe?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  14 août 2008 à 11:41:00

                  oui, on peut mettre des fonctions membres dedans.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 août 2008 à 11:52:19

                    en C++ la seule différence entre class et struct c'est que class est par defaut private et struct par defaut public. On peut mettre des méthode dans class et struct.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 août 2008 à 12:10:56

                      Pour être plus juste, en C++ il y a deux différences entre classes et structures :
                      - Quand on hérite une classe d'une autre, si l'on ne précise pas le type de l'héritage(public/protected/private), il est privé. Avec les structures, c'est public.
                      - Quand on place un attribut ou une fonction dans une classe, si l'on a pas avant précisé la visibilité(public/protected/private), l'élément que l'on a placé a une visibilité privée. Avec les structures, c'est public.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        14 août 2008 à 12:12:50

                        Méthode représente "fonction membre static". [C'est un petit détail faux du tuto.]
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 août 2008 à 18:45:28

                          Citation : Ice_Keese

                          Lâche les tableaux de char, et utilise des std::string à la place. Et puis, pour lire un fichier, rien de mieux qu'un std::ifstream...

                          std::ifstream ifs("fichier.txt");
                          std::string ligne;
                          std::getline(ifs, ligne);
                          // ligne contient maintenant la ligne complète, CR/LF exclus
                          


                          Et ainsi de suite.



                          Il est important de mentionner que je suis novice en C++
                          Oui.... je comprend, mais comment maintenant faire pour que je puisse mettre ligne dans la structure produit afin que je puisse voir le contenu de champ1 ou champ3 par exemple.

                          Merci pour vos messages en passant
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 août 2008 à 19:01:25

                            Hum, disons, après le code ci-dessus...
                            produit p; // admettons que produit contient des std::string au lieu de des char[]
                            p.champ1 = ligne.substr(0, 10); // on part à l'indice 0 et on prend 10 caractères
                            p.champ2 = ligne.substr(10, 25);
                            

                            Et ainsi de suite. Il y a probablement une façon plus efficace de procéder, mais j'y suis allé simplement.

                            Vois-tu, le C++ a une excellente bibliothèque de classes (nommée la STL). Il serait absurde de s'en passer.

                            Ah, oui, l'idéal serait de créer un constructeur pour produit. Et de faire de produit une classe à part entière (pour des raisons d'encapsulation).
                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 août 2008 à 14:16:18

                              Moi j'aurais fait

                              std::ifstream Fichier("fichier.txt");
                              
                              produit p;
                              Fichier >> p.champ1;
                              Fichier >> p.champ2;
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                15 août 2008 à 14:52:58

                                Citation : quarty

                                Moi j'aurais fait

                                std::ifstream Fichier("fichier.txt");
                                
                                produit p;
                                Fichier >> p.champ1;
                                Fichier >> p.champ2;
                                
                                Si les champs sont séparé par des espaces ou par ligne. sinon non.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 août 2008 à 16:00:22

                                  oui bien sur. J'ai oublié de préciser
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Manière efficace de lire un fichier dans une structure

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown