Remplir tableau fichier txt en C
sophie_m Messages postés 25 Statut Membre -
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
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.
-
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 :) -
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;
} -
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 -
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
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? -
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 ? -
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 -
-
oui le seul problème est de savoir la taille chaque ligne que tu dois mettre dans ton tableau
c'est TAILLE_MAX ? -
-
non TAILLE_MAX c'est juste la taille d'une ligne.
La taille du tableau je ne la connait pas. -
-
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 -
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? -
j'ai une erreur de débutant le compilateur le dit qu'il lui manque le proto
c'est pas void init_tab(); ???? -
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 -
-
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: "=" -
- 1
- 2