Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de lecture de fichier texte

n'arrive qu'a lire un soixantaines de lignes

Sujet résolu
    30 novembre 2007 à 18:36:36

    salut les zeros j'ai un probleme de lecture de mon fichier texte. En effet il lit bien ligne par ligne mais n'arrive pas à lire toutes les lignes (seulement 64 lignes sont lut). J'ai fais plein de test mais je ne trouve pas alors si quelqu'un à une idée merci
    1. #include <iostream>
    2. #include <fstream>
    3. #include <sstream>
    4. #include "filemanager.h"
    5. int main()
    6. {
    7.         CFileManager* fileMan = new(CFileManager);
    8.     char *nomfichier2;
    9.     ListPath::iterator it;
    10.     ListPath* pListData = fileMan->GetListeFilename("DATA\\","*.txt");
    11.     if ( pListData)
    12.     {
    13.          std::string ptr;
    14.           for(it = pListData->begin(); it != pListData->end(); it++)
    15.           {
    16.           ptr = *it;
    17.           MessageBox(0,ptr.c_str(),0,0);
    18.           std::string nomfichier=ptr;
    19.           char *s = strrchr( ptr.c_str(), '\\' );
    20.           s++;
    21.           nomfichier = "Stat_" ;
    22.           nomfichier+=s;
    23.           // le constructeur de ifstream permet d'ouvrir un fichier en lecture
    24.           std::ifstream fichier( ptr.c_str());
    25.           std::ofstream fichier2(nomfichier.c_str(), std::ios::out | std::ios::trunc);
    26.           /*delete nomfichier2;*/
    27.     // ouverture en écriture avec effacement du fichier ouvert
    28.     std::stringstream buffer; // variable contenant l'intégralité du fichier
    29.     //if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
    30.     // {
    31.         std::string ligne; // variable contenant chaque ligne lue
    32.         int nblignes=0;
    33.         int nbcarac=0;
    34.         // cette boucle s'arrête dès qu'une erreur de lecture survient
    35.         while ( std::getline( fichier, ligne ) )
    36.         {
    37.              // afficher la ligne à l'écran
    38.              std::cout << fichier.gcount() << std::endl;
    39.             // mettre ligne du fichier dans le buffer
    40.             if ((nblignes==8)||(nblignes>=34))
    41.             {
    42.                 if(nblignes>=40)
    43.                 {
    44.                     if ( nblignes >= 66 )
    45.                     {
    46.                         ligne.erase(13,42);
    47.                         nbcarac= buffer.str().size() ;
    48.                         fichier2 << ligne<< "\n";
    49.                         std::cout << ligne << std::endl;
    50.                     }
    51.                     else
    52.                     {
    53.                         ligne.erase(13,42);
    54.                         nbcarac= buffer.str().size() ;
    55.                         fichier2 << ligne<< "\n";
    56.                         std::cout << ligne << std::endl;
    57.                     }
    58.                 }
    59.                 else
    60.                 {
    61.                     if (nblignes==36)
    62.                     {
    63.                         ligne.replace(0,4,"Qté ");
    64.                         ligne.erase(54,20);
    65.                         fichier2 << "Lot  1    2    3    4    5    6    7    8    9     10 \n";
    66.                         fichier2 << ligne<< "\n";
    67.                         std::cout << ligne << std::endl;
    68.                     }
    69.                     else
    70.                     {
    71.                         fichier2 << ligne<< "\n";
    72.                         std::cout << ligne << std::endl;
    73.                     }
    74.                 }
    75.             }
    76.             nblignes++;
    77.         }
    78.             fichier.close();
    79.             fichier2.close();
    80.     //}
    81.     }
    82.     }// nous n'avons plus besoin du fichier !
    83.         return 0;
    84. }

    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2007 à 19:26:41

      Une lecture ne se fait pas sur eof() ! (on ne le répètera jamais assez)
      -> FAQ C++ de developpez.
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        1 décembre 2007 à 9:58:02

        ok merci je suis d'acccord mais c'est pendant mes test que j'ai ajouté cette ligne alors ca resoud pas le probleme. j'ai remis le code de base.merci
        • Partager sur Facebook
        • Partager sur Twitter
          2 décembre 2007 à 9:08:09

          Je te conseil d'utiliser <stdio.h> elle est (pour moi en tout cas) bien plus pratique que celle du c++, elle est coprehensible et lisible. et tu contrôle tout toi même.
          • Partager sur Facebook
          • Partager sur Twitter

          La maîtrise des fondamentaux est le fondamental de la Maîtrise.

          Anonyme
            2 décembre 2007 à 10:54:45

            Citation : fissal_houate

            Je te conseil d'utiliser <stdio.h> elle est (pour moi en tout cas) bien plus pratique que celle du c++, elle est coprehensible et lisible. et tu contrôle tout toi même.


            De quoi tu parles? il y a beaucoup de chose dans stdio.h :euh: .
            • Partager sur Facebook
            • Partager sur Twitter
              2 décembre 2007 à 12:01:05

              Je crois qu'il parle des structures FILE et des fonctions qui
              permettent de les manipuler.
              • Partager sur Facebook
              • Partager sur Twitter
                2 décembre 2007 à 12:14:33

                Franchement, utiliser stdio.h pour ça est une très mauvaise raison. La STL et ses flux est bien plus puissante et avancée que cette bibliothèque C.
                Je te conseille cependant de lire le tuto qui en parle.
                • Partager sur Facebook
                • Partager sur Twitter
                Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                Anonyme
                  2 décembre 2007 à 12:25:32

                  Citation : magnanime

                  Je crois qu'il parle des structures FILE et des fonctions qui
                  permettent de les manipuler.


                  Woo :waw: si c'est ça qu'il voulait dire.... Je suis tout à fait d'accord avec Nanoc!
                  Comment peut-il faire sans la SL?? :euh: Ces FILEs sont épouvantable je trouve. (j'aime pas le non OO :-° )
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 décembre 2007 à 13:34:26

                    Non les gars, je m'attache beaucoup à la structure FILE de stdio.h, j'en suis même amoureux, je l'adore, elle est géniale..., non, mais c'est vrai, la plus part des programmeurs pro l'utilisent, je vous assure, même moi je la trouve plutot très simple et efficasse, quoi demander de plus?
                    • Partager sur Facebook
                    • Partager sur Twitter

                    La maîtrise des fondamentaux est le fondamental de la Maîtrise.

                    Anonyme
                      2 décembre 2007 à 13:35:39

                      qqch de plus simple, de plus efficace, et d'OO.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 décembre 2007 à 13:40:14

                        Ok, mais chacun possède sa façon de coder! (ça ne veut pas dire que si j'utilise stdio.h que je ne fais pas de poo, ou que je ne peux pas en faire!)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        La maîtrise des fondamentaux est le fondamental de la Maîtrise.

                          2 décembre 2007 à 13:54:28

                          C'est même pas une question d'OO ou pas.

                          Avec la STL tu as accès à une énorme quantité de manipulateurs de flux, d'itérateurs sur des flux (très utile pour les algos), des opérateurs sur les flux, la gestion automatique des exceptions,...

                          Enfin cmme tu le dis, chacun sa manière de coder.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                            2 décembre 2007 à 14:02:11

                            Merci beaucoup Nanoc pour ta compréhension.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            La maîtrise des fondamentaux est le fondamental de la Maîtrise.

                              3 décembre 2007 à 11:55:04

                              Citation : fissal_houate

                              Non les gars, je m'attache beaucoup à la structure FILE de stdio.h[...] je la trouve plutot très simple et efficasse, quoi demander de plus?


                              Hum ?
                              - RAII
                              - typage fort qui évite les bugs d'inatention/mauvais réveil/gueule de bois
                              - Pas avoir à se soucier de la mémoire allouée et autres débordements de buffers quand on lit des chaînes -- tout en supportant une souplesse d'utilisation

                              C'est pas grand chose, mais cela fait une différence que j'apprécie fortement. Combien même je sacrifie des perfs.

                              Après il y a les petits plus parfois sympas qui sont propres à la complexité des flux C++:
                              - localisation localisée (sic) à chaque flux
                              - possibilité de plugger des filtres les uns sur les autres (pour ignorer les commentaires comme s'ils n'avaient jamais existé, dézipper à la volée, reformatter/estampiller à la volée, etc)


                              Sinon, que t'affiche:
                              1. for (nblignes=0 ; std::getline(fichier, ligne) ; ++nblignes)
                              2. {}
                              3. std::cout << "Il y a " << nblignes << "\n";

                              ?
                              Si cela ne t'affiche pas ce que tu espères, c'est que ton fichier ne contient pas ce que tu penses.
                              Une fois ce canava opérationel, tu pourras rajouter tes manipulations à l'intérieur de la boucle.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                              Probleme de lecture de fichier texte

                              × 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