Charger lignes fichier csv dans tableau C

Résolu
Bonjour,

Je dois écrire un programme qui lit un fichier de type csv et range les infos dans une structure de donnée déja définie.
le fichier est écrit de cette façon :
"ljhjj";"fdfdf";"hfdkfhkfhkl";"1";"5";
"kfdknfdk";"fdkgn";"ldflld";"5";"9";
....ainsi de suite .

j'ai voulu utiliser fgets mais j'ai pas pu ... qq pourra m'aider ?? c'est vraiment urgent !!

merci

3 réponses

  1. Contributeur
    Salut
    Pourquoi fgets ne fonctionne pas ?
    Si tu connais le nombre de variables à récupérer, tu peux utiliser fscanf.
    0
    1. si fgets fonctionne mais j'arrive pas a les mettre dans un tableau ou je stocke toute les lignes du fichier
      0
      1. Contributeur
        Il te faut un tableau à double entrée, si ta ligne est stocker dans une variable char* ligne, tu fais :
        char tab_ligne[50][50];// ajuste tes dimensions à ce que tu veux faire.
        int i=0,c=0,c2=0;
        for(i=0;i<strlen(ligne);++i)
        {
          if(ligne[i]==';')
          {
             tab_ligne[c][c2+1]='\0';
             c++;
             c2=0;
          }else
          {
            tab_ligne[c][c2]=ligne[i];
            c2++;
          }
        }
        0
      2. Moi j'ai fait comme ca mais j'arrive pas a le faire fonctionner

        /* Transforme une ligne du fichier en tableau pour recupere les donnees*/
        char** transformer_chaine_tab(char* chaine){
        char sep[] = ",";
        int i;
        char** tablo = malloc(6*sizeof(char*));
        char* mot = strtok(chaine,sep);
        for(i=0 ; i<6 && mot != NULL ; i++){
        tablo[i] = mot;
        mot = strtok(NULL,sep);
        }
        return tablo;
        }

        char*** charger_fichier(char* fichier){
        FILE* flot = fopen(fichier, "r");
        int i = 0 , nb_lignes = compter_lignes(fichier);
        char*** tab = malloc(nb_lignes*sizeof(char**));
        char s[TAILLE_MAX_LIGNE+1];
        char* ligne;
        while(i<10 && (ligne = fgets(s,TAILLE_MAX_LIGNE,flot)) != NULL){
        tab[i] = transformer_chaine_tab(ligne);
        i++;
        printf("i=%d\n ligne=%s\n",i,tab[i][i]);
        }
        return tab;
        }
        0
      3. Contributeur
        attention aux allocations et au égalisations en chaine de caractères.
        pour mettre une chaine dans une autre, il faut utiliser strcpy().
        Il manque, entre autre, l'allocation de "lign".
        0
      4. comment sa il manque l'allocation de ligne
        0
      5. c'est j'ai decouvert ou il manqué l'allocation merci pour ton aide
        0
    2. ok merci je vai essayer sa
      0