Remplir tableau fichier txt en C

sophie_m Messages postés 25 Statut Membre -  
sophie_m Messages postés 25 Statut Membre -
Bonjour,

voila je programme en C j'ai un tableau rempli en dur qui contient des chaines de caractère :
exemple :
char *MesMes[] =
{
/* 0 ID_POINT_INTER4 0 */ "????",
/* 1 ID_FORMATAGE 1 */ "Formatage ......",
/* 2 ID_CONDUCTEUR 2 */ "CONDUCTEUR :",
/* 3 ID_PRISE_DE_SERVICE 3 */ " PRISE DE SERVICE ",
...
}
Je voudrais mettre tout ca dans un fichier texte et ensuite grace a une fonction remplir le tableau grace à ce fichier.
Je n'ai aucune idée de quelle fonction utiliser pour lire le fichier texte, ou placer une à une les chaine de caractères dans le tableau.
Toute aide sera la bienvenue.
Merci d'avance
Configuration: Windows Vista
Internet Explorer 7.0

38 réponses

  • 1
  • 2
Résumé de la discussion

Un développeur C cherche à lire des chaînes depuis un fichier texte afin de remplacer un tableau par des valeurs lues, et demande quelle fonction employer. Plusieurs réponses préconisent fopen et fgets dans une boucle avec un tampon de taille fixe, puis soit strcpy soit l’assignation de pointeurs pour alimenter le tableau. Des échanges soulignent aussi des problèmes de prototypes, de mémoire et de sécurité des tampons, et proposent des versions avec en-têtes adéquats, vérification d’ouverture et gestion des retours de fgets. En pratique, la solution correcte nécessite une allocation et un dimensionnement appropriés des chaînes ou l’usage de buffers dynamiques, et certains échanges évoquent l’intérêt d’écrire le contenu du tableau dans le fichier ensuite.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. kazou
     
    tu veux mettre ce qu'il y a dans le tableau dans le fichier ou le contraire ?

    si c'est du tableau dans le fichier c'est simple tu fais un fopen
    puis une boucle sur la taille de ton tableau et a chaque itération tu fprintf dans ce fichier

    confirme si c'est ce que tu voulais ou explique en mieux :)
    1
  2. sophie_m Messages postés 25 Statut Membre 2
     
    ok merci et pour le reste je pensais fair ca:

    #define TAILLE_MAX = 100

    void init_tab()
    {
    int i=0;
    char chaine[TAILLE_MAX]="";
    FILE* fichier = NULL;
    fichier = fopen(essai.txt", "r");
    if (fichier != NULL)
    {
    while ( fgets (chaine, TAILLE_MAX, ficher) != NULL)
    {
    *MesMes[i]=printf ("ùs", chaine);
    i ++;
    }
    fclose (fichier);
    }
    retun 0;
    }
    1
  3. shuya89 Messages postés 483 Statut Membre 39
     
    les fonctions pour les fichier sont :

    fopen pour ouvrir un fichier
    fread pour lire un fichier
    fprintf pour erir sur ce ficier voila mais il y a un bon tuto sur le site du zero va y faire un tour et tu trouveras ta solution
    0
  4. sophie_m Messages postés 25 Statut Membre 2
     
    Merci beaucoup, je vais allé y faire un tour.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. shuya89 Messages postés 483 Statut Membre 39
     
    mais derien c normal
    0
  7. sophie_m Messages postés 25 Statut Membre 2
     
    les deux.n fait la tout est dans un tableau.Mais c'est codé en dur donc "pas bien".
    Je pensais mettre manuellement ce qu'il y a dans le tableau dans le fichier txt.
    Et ensuite il faut que je prenne mon fichier txt et que je m'en serve pour remplir un nouveau tableau.Tu comprends?
    0
  8. kazou
     
    oui ok pour ecrire dans le txt tu fais

    FILE * f = fopen("fichier.txt","a+");

    for(int i=0;i<SIZE-1;i++)
    fprintf(f,"%s",array[i]);

    fclose(f);

    ca te vas ?
    0
  9. kazou
     
    non
    *MesMes[i]=printf ("ùs", chaine);
    ne marchera pas la fonction printf renvoi un int qui n'a absolument rien a voir avec ce quelle affiche
    0
  10. sophie_m Messages postés 25 Statut Membre 2
     
    mince, tu as une autre idée?
    0
  11. kazou
     
    oui le seul problème est de savoir la taille chaque ligne que tu dois mettre dans ton tableau
    c'est TAILLE_MAX ?
    0
  12. shuya89 Messages postés 483 Statut Membre 39
     
    aites un sizeof les gens
    0
  13. sophie_m Messages postés 25 Statut Membre 2
     
    non TAILLE_MAX c'est juste la taille d'une ligne.
    La taille du tableau je ne la connait pas.
    0
  14. shuya89 Messages postés 483 Statut Membre 39
     
    et ben sizeof (tableau[numero de ligne])
    0
  15. kazou
     
    jai mieu pour lecriture tu fais
    FILE * f = fopen("fichier.txt","a+");

    for(int i=0;i<SIZE-1;i++)
    fprintf(f,"%s",array[i]);
    fprintf(f,"\n",);

    fclose(f);

    et pour la lecture tu n'a plus qu'a faire

    while ( fgets (f, TAILLE_MAX,buffer))
    {
    stcpy(buffer, MesMes[i]);
    i++;
    }

    en faite le fgets s'arrete des qu'il rencontre un un saut de ligne donc tu copie toute la ligne dans buffer et tu la copy dans ton tableau en suite

    je pense que ca marche confirme moi
    0
  16. sophie_m Messages postés 25 Statut Membre 2
     
    excusez moi je ne comprend pas tout.
    voila un exemple de fichier txt :
    "????",/n
    "Formatage ......",/n
    "CONDUCTEUR :",/n
    " PRISE DE SERVICE ",/n

    j'ai lu que fgets s'arretait a chaque /n

    pourquoi est ce qu'il me faudrai la taille?
    0
  17. sophie_m Messages postés 25 Statut Membre 2
     
    j'ai une erreur de débutant le compilateur le dit qu'il lui manque le proto
    c'est pas void init_tab(); ????
    0
  18. kazou
     
    la taille c'est juste une précaution fgets va s'arrêter de lire soit a TAILLE soit a \n
    donc met une TAILLE assez grande

    pour la petite histoire il faut mettre une taille car tu ne peux pas utiliser la fonction gets() qui elle ne nécessite pas de taille , mais ne vérifie pas la taille de ton buffer et peu aller écrire un peu partout dans ta mémoire donc pas bien donc on utilise Fgets
    0
  19. kazou
     
    si tu met un "return 0" c'est
    INT init_tab();
    0
  20. sophie_m Messages postés 25 Statut Membre 2
     
    ca ne marche pas.
    voila mon code :
    int init_tab();
    #define TAILLE_MAX = 100
    void init_tab()
    {
    int i=0;
    char chaine[TAILLE_MAX]="";
    FILE * fichier = NULL;
    fichier = fopen("essai.txt","r");
    if ((fichier !=NULL)
    {
    while ( fgets (f, TAILLE_MAX,buffer))
    {
    stcpy(buffer, MesPrt[i]);
    i++;
    }
    fclose(fichier);
    }
    return(0);
    }

    voila les erreurs :
    "main.c", line 21 pos 7; (W) [ANSI] missing prototype for "init_tab"
    "main.c", line 23 pos 6; (W) [ANSI] missing prototype for "init_tab"
    "main.c", line 23 pos 6; (E) inconsistent redeclaration of "init_tab"
    "main.c", line 26 pos 21; (E) syntax error; unexpected symbol: "="
    "main.c", line 27 pos 17; (E) syntax error; unexpected symbol: "="
    "main.c", line 30 pos 2; (E) syntax error; unexpected symbol: "{"
    "main.c", line 31 pos 27; (E) syntax error; unexpected symbol: "="
    0
  21. kazou
     
    tu as un main ?

    et retire ton return 0 qui ne sert a rien
    0
  • 1
  • 2