Charger lignes fichier csv dans tableau C

Résolu
nounou_89 Messages postés 56 Statut Membre -  
nounou_89 Messages postés 56 Statut Membre -
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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Salut
    Pourquoi fgets ne fonctionne pas ?
    Si tu connais le nombre de variables à récupérer, tu peux utiliser fscanf.
    0
  2. nounou_89 Messages postés 56 Statut Membre 12
     
    si fgets fonctionne mais j'arrive pas a les mettre dans un tableau ou je stocke toute les lignes du fichier
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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. nounou_89 Messages postés 56 Statut Membre 12
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      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. nounou_89 Messages postés 56 Statut Membre 12
       
      comment sa il manque l'allocation de ligne
      0
    5. nounou_89 Messages postés 56 Statut Membre 12
       
      c'est j'ai decouvert ou il manqué l'allocation merci pour ton aide
      0
  3. nounou_89 Messages postés 56 Statut Membre 12
     
    ok merci je vai essayer sa
    0