Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture fichier avec chiffres en colonne

    28 mai 2007 à 14:39:57

    Bonjour à tous,

    j'essaye de me mettre tout doucement à programmer en c++.

    J'aimerai savoir s'il existe une manière efficace de récupérer des chiffres sous la forme d'une seul colonne et de les passer dans un tableau. J'ai bien une boucle qui me le fait mais elle est longue et se base sur le langage C plus que sur du C++.

    Merci.

    Micahell.
    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2007 à 16:07:33

      Commence par nous montrer ce que tu as fait et un petit exemple de ton fichier parce que ce n'est pas très clair
      • Partager sur Facebook
      • Partager sur Twitter
        28 mai 2007 à 18:14:02

        j'avais ca


        FILE * h;
                long lSize;
                char * buffer;
               
                h = fopen ( "h.txt" , "rb" );
                if (h==NULL) exit (1);

                // on recupere la taille du fichier
                fseek (h , 0 , SEEK_END);
                lSize = ftell (h);
                rewind (h);

                //je calcul le nombre de ligne
                do
                {
                        ligneLu = fgetc(h);
                       
                        if (ligneLu == '\n')
                                nombreLigne++;
                }
                while(ligneLu != EOF);
               
                rewind (h);

        // on alloue la mémoire pour le buffer (où seront stockée les valeurs du fichier)
                buffer = (char*) malloc (lSize);
                if (buffer == NULL) exit (2);

        // on remplit le buffer avec les valeurs du fichier
                fread (buffer,1,lSize,h);
               
        // on ferme le fichier
                fclose (h);

        // on fait ce qu'on veut avec le buffer ....
        // on peut recuperer les valeurs et les mettre dans un tableau
                i=0;
                char valeur[NB_CHAR];
                int nDecimale=0;
                int numeroValeur=0;
                double nb;
                double * tabH = (double *) malloc((nombreLigne) * sizeof(double));
                while(i<lSize)
                {
                        while(buffer[i] != '\n') // on recupere les valeurs ligne par ligne
                        {
                                if((buffer[i]>='0' && buffer[i]<='9') || buffer[i] == '.')// On vérifie que le caractere soit bien un nombre ou un point
                                {
                                        if(nDecimale<NB_CHAR)
                                        {
                                                valeur[nDecimale]=buffer[i];
                                                nDecimale++;
                                        }
                                }
                                i++;
                        }
                       
                        nb = atof(valeur); // on a recupéré la valeur (de type double) lue dans le buffer
                        if(numeroValeur<nombreLigne) tabH[numeroValeur]=nb;
                        numeroValeur++;
                        nDecimale = 0;
                        i++;
                }
               
                free (buffer);
            free (valeur);
        • Partager sur Facebook
        • Partager sur Twitter
          28 mai 2007 à 18:33:18

          effectivement c'est très C ton affaire ;)

          commence par changer la lecture avec un ifstream, puis tes buffer avec un std::vector, et tes chaînes avec des std::string... en ordre inverse :)

          les string c'est super simple d'utilisation
          les vector aussi une fois que tu as compris les strings et les (l'utilistation des) templates
          et les ifstream c'est pas si mal mais il faut s'habituer avec des petits projet.
          • Partager sur Facebook
          • Partager sur Twitter

          Lecture fichier avec chiffres en colonne

          × 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