Remplir tableau fichier txt en C

Fermé
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 - 3 juin 2008 à 14:07
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 - 3 juin 2008 à 16:31
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
A voir également:

38 réponses

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
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 14:45
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
shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
3 juin 2008 à 14:10
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
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 14:15
Merci beaucoup, je vais allé y faire un tour.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
3 juin 2008 à 14:16
mais derien c normal
0
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 14:34
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
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
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
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 14:51
mince, tu as une autre idée?
0
oui le seul problème est de savoir la taille chaque ligne que tu dois mettre dans ton tableau
c'est TAILLE_MAX ?
0
shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
3 juin 2008 à 14:56
aites un sizeof les gens
0
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 14:56
non TAILLE_MAX c'est juste la taille d'une ligne.
La taille du tableau je ne la connait pas.
0
shuya89 Messages postés 470 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 28 novembre 2014 39
3 juin 2008 à 14:57
et ben sizeof (tableau[numero de ligne])
0
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
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 15:02
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
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 15:05
j'ai une erreur de débutant le compilateur le dit qu'il lui manque le proto
c'est pas void init_tab(); ????
0
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
si tu met un "return 0" c'est
INT init_tab();
0
sophie_m Messages postés 25 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 5 juin 2008 2
3 juin 2008 à 15:10
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
tu as un main ?

et retire ton return 0 qui ne sert a rien
0