Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème dans une Lecture d'un fichier .csv en C

Sujet résolu
    8 février 2023 à 12:46:52

    Bonjour, j'ai écris un code en C où j'ai des erreurs de segmentation. J'ai  remarqué qu'il ne remplissait pas mes tableaux A et B lors de la lecture du fichier. Mais je ne vois pas pourquoi.

    C'est un devoir pour demain, donc c'est assez urgent. Merci d'avance. Voici le code:

    int main ()
    {
        int n = 1;
        int A[N];
        int B[N];

        FILE *file = fopen("Instance.csv","r");
        if (file == NULL) {
            printf("Impossible d'ouvrir le fichier\n");
            assert(0);
        }

        // Lecture du tableau dans le fichier
        char ligne[50];
        while (fgets(ligne, sizeof(ligne), file) != NULL && n<N)
        {
            // Découper la ligne en 2 champs séparés par une virgule pour récupérer les valeurs des calculs
            char *a = strtok(ligne, ",");
            char *b = strtok(NULL, ",");

            //On ne lit pas la 1ère ligne
            if(strcmp(a,"A") != 0)
            {
                A[n] = atoi(a);
                B[n] = atoi(b);
                n += 1;
                printf("%d et %d\n",A[n],B[n]);
            }
        }
        fclose(file);

    }

    -
    Edité par ThithideTitide 8 février 2023 à 12:47:19

    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2023 à 13:35:22

      Bonjour, Évitez les titres de sujet avec "problème" si vous postez on se doute que vous avez un problème, inutile de l'indiquer dans le titre cela n'apporte aucune information supplémentaire quant au contenu du sujet. 

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Pas d'urgence sur ce forum

      Vous êtes sur un forum d'entraide, pas sur un site de service. Ici les intervenants vous répondent quand ils le veulent, s'ils le veulent, sans aucune obligation. Aussi, ce genre d'indications rendent le forum moins agréable à utiliser et moins équitable. De ce fait, les mentions de quelconque "urgence" ne sont pas admises sur ce forum. La meilleure façon d'avoir de l'aide rapidement ici est de fournir toutes les informations nécessaires et de les présenter correctement. N'hésitez pas à lire les règles épinglés en haut des sections du forum, elles indiquent généralement ce qui est nécessaire.

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      -
      Edité par AbcAbc6 8 février 2023 à 13:37:11

      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2023 à 13:35:22

        Si tu veux que ça se fasse vite, il faut respecter les règles,

        • Mettre sous balises ton code
        • Rendre testable ton code (cela inclus donc les librairies utilisées)
        • Indiquer par exemple à l'aide d'un debugger l'erreur que tu ne comprends pas

        Je pense à une erreur d'indice qui dépasse la taille du tableau,

        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        #include <assert.h>
        
        #define N 50
        
        int main()
        {
            int n = 1;
            int A[N];
            int B[N];
            
            FILE *file = fopen("Instance.csv","r");
            if (file == NULL)
            {
                printf("Impossible d'ouvrir le fichier");
                assert(0);
            }
            
            // Lecture du tableau dans le fichier
            char ligne[50];
            while (fgets(ligne, sizeof(ligne), file) != NULL && n<N)
            {
                // Découper la ligne en 2 champs séparés par une virgule pour récupérer les valeurs des calculs
                char *a = strtok(ligne, ",");
                char *b = strtok(NULL, ",");
                
                //On ne lit pas la 1ère ligne
                if (strcmp(a, "A") != 0)
                {
                    A[n] = atoi(a);
                    B[n] = atoi(b);
                    n += 1;
                    printf("%d %d\n", A[n-1], B[n-1]);
                }
            }
            fclose(file);
            
            return 0;
        }
        



        -
        Edité par fred1599 8 février 2023 à 13:40:20

        • Partager sur Facebook
        • Partager sur Twitter

        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          8 février 2023 à 22:19:49

          Faudrait voir le fichier d'entrée, aussi.

           Sinon on ne peut pas reproduire le problème.

          Faut éviter de yoyoter avec les indices. En C ils partent de 0, à Rome faire comme les romains, donc commencer à  n=0 et pas de fantaisies avec n-1

          Aussi :

          • Lire la première ligne avant la boucle
          • sscanf(ligne, "%d,%d", &A[n], &B[n]);  ça ferait pas le boulot ?

          -
          Edité par michelbillaud 9 février 2023 à 10:25:23

          • Partager sur Facebook
          • Partager sur Twitter

          Problème dans une Lecture d'un fichier .csv en C

          × 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