Aide! lecture de fichier en Code C
Fermé
Aline
-
24 nov. 2007 à 01:45
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 nov. 2007 à 07:25
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 nov. 2007 à 07:25
A voir également:
- Aide! lecture de fichier en Code C
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier iso - Guide
8 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 nov. 2007 à 01:58
24 nov. 2007 à 01:58
Salut,
Tu n'as pas initialiser ton tableau tbl.
Tu peux par exemple faire int tab[255]; si tu sais que tu n'auras pas plus de 256 nombres sur une ligne. Sinon tu devras faire de l'allocation dynamique.
Pour lire la deuxième ligne, tu fais une deuxième boucle while avec la condition feof() pour détecter la fin du fichier.
Lorsque tu arrives à "\n", c'est que tu changes de ligne.
Cordialement
Tu n'as pas initialiser ton tableau tbl.
Tu peux par exemple faire int tab[255]; si tu sais que tu n'auras pas plus de 256 nombres sur une ligne. Sinon tu devras faire de l'allocation dynamique.
Pour lire la deuxième ligne, tu fais une deuxième boucle while avec la condition feof() pour détecter la fin du fichier.
Lorsque tu arrives à "\n", c'est que tu changes de ligne.
while(! feof(ptr_fichier)) { do{ fscanf(ptr_fichier, "%d", &tbl[ctr]); printf("tbl[ctr]=%d\n", tbl[ctr]); ctr++; }while(tbl[ctr-1]!='\n'); /* et là tu es repartie pour lire les lignes suivantes ;) */ }
Cordialement
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
24 nov. 2007 à 02:41
24 nov. 2007 à 02:41
Salut,
pourquoi pas
pourquoi pas
#include <stdio.h> #include <stdlib.h> int main() { FILE *ptr_fichier; int tbl[255]; int ctr=0; if((ptr_fichier=fopen("Refroid.txt", "r")) == NULL) return -1; do{ fscanf(ptr_fichier, "%d", &tbl[ctr]); printf("tbl[%d]=%d\n",ctr, tbl[ctr]); ctr++; }while(! feof(ptr_fichier)); system("PAUSE"); return 0; }
J'ai essayé tous les codes suggérés, puis une erreur fatale se produit toujours.
Bonjour,
Merci infiniment pour votre aide.
J'ai fais des changements a mon code selon ce que vouz m'avez expliquer. Toutefois, la boucle n'arrete pas lorsque le pointeur est rendu au bout de la 2e ligne. A la sortie du programme, les deux premieres lignes apparraissent, mais une gamme de valeurs apparaissent par apres. Pourquoi la boucle avec le fscanf continue-t-elle apres la fin de la ligne? J'ai pourtant preciser un do while(tbl[ctr-1] != 'n') <-- est-ce bien ce que je dois faire?
Ce que j'essaie de faire, c'est de compter le nombre d'éléments dans la première ligne et le nombre d'éléments dans la deuxième ligne pour ensuite créer une matrice qui a ces dimensions. Je ne veux donc pas lire toutes les lignes du texte en meme temps. (je ne suis pas sure si c'est ce que ton fesait, mais j'ai eu l'impression que oui)
Voici mon nouveau code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *ptr_fichier;
int tbl[17]={0}, tbl2[21]={0};
int valeur;
int ctr=0;
int nb_rangees=0, nb_colonnes=0;
ptr_fichier=fopen("Refroid.txt", "r");
if (ptr_fichier!=NULL)
{
do
{
fscanf(ptr_fichier, "%d", &tbl[ctr]);
printf("%d\n", tbl[ctr]);
ctr++;
nb_rangees++;
if(tbl[ctr]=='n')
nb_rangees--;
}
while(tbl[ctr-1]!='\n');
ctr=0;
do
{
fscanf(ptr_fichier, "%d", &tbl2[ctr]);
printf("%d\n", tbl2[ctr]);
ctr++;
nb_rangees++;
if(tbl2[ctr]=='n')
nb_colonnes--;
}
while(tbl2[ctr-1]!='n');
}
else{
printf("fichier n'existe pas.");
}
system("PAUSE");
return 0;
}
Bonjour,
Merci infiniment pour votre aide.
J'ai fais des changements a mon code selon ce que vouz m'avez expliquer. Toutefois, la boucle n'arrete pas lorsque le pointeur est rendu au bout de la 2e ligne. A la sortie du programme, les deux premieres lignes apparraissent, mais une gamme de valeurs apparaissent par apres. Pourquoi la boucle avec le fscanf continue-t-elle apres la fin de la ligne? J'ai pourtant preciser un do while(tbl[ctr-1] != 'n') <-- est-ce bien ce que je dois faire?
Ce que j'essaie de faire, c'est de compter le nombre d'éléments dans la première ligne et le nombre d'éléments dans la deuxième ligne pour ensuite créer une matrice qui a ces dimensions. Je ne veux donc pas lire toutes les lignes du texte en meme temps. (je ne suis pas sure si c'est ce que ton fesait, mais j'ai eu l'impression que oui)
Voici mon nouveau code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *ptr_fichier;
int tbl[17]={0}, tbl2[21]={0};
int valeur;
int ctr=0;
int nb_rangees=0, nb_colonnes=0;
ptr_fichier=fopen("Refroid.txt", "r");
if (ptr_fichier!=NULL)
{
do
{
fscanf(ptr_fichier, "%d", &tbl[ctr]);
printf("%d\n", tbl[ctr]);
ctr++;
nb_rangees++;
if(tbl[ctr]=='n')
nb_rangees--;
}
while(tbl[ctr-1]!='\n');
ctr=0;
do
{
fscanf(ptr_fichier, "%d", &tbl2[ctr]);
printf("%d\n", tbl2[ctr]);
ctr++;
nb_rangees++;
if(tbl2[ctr]=='n')
nb_colonnes--;
}
while(tbl2[ctr-1]!='n');
}
else{
printf("fichier n'existe pas.");
}
system("PAUSE");
return 0;
}
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
24 nov. 2007 à 03:00
24 nov. 2007 à 03:00
c'est '\n' et pas 'n'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 nov. 2007 à 03:01
24 nov. 2007 à 03:01
Re,
Tu utilises 'n' au lieu de '\n'.
Sinon tu peux essayer ceci aussi ;)
Tu utilises 'n' au lieu de '\n'.
Sinon tu peux essayer ceci aussi ;)
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char buffer1[255]; int ligne,colonne; if((ptr_fichier=fopen("Refroid.txt", "r")) == NULL) return -1; /*lecture première ligne*/ fgets(buffer,255,fp); /*décompte nombre d'élément*/ ligne=0; while(buffer[ligne++]!='\n'); fgets(buffer2,255,fp); colonne=0; while(buffer[colonne++]!='\n'); system("PAUSE"); return 0; } Tu peux utiliser ce code là, et l'adapter selon tes besoins.
Mon problème c'est que je peux seulement determiner la quantite maximale de nombre que contiendra mon tableau.
Si j'utilise fgets, je doit specifier un nombre de caracteres, que je ne connais pas.
Est-ce possible de faire arreter fscanf au bout de la ligne?
Comment est-ce que je peux ensuite commencer la lecture de la deuxieme ligne de code?
Je suis desolee pour tout le trouble, je n'en connais pas beaucoup au sujet de la lecture de fichiers.
Merci,
Aline
Si j'utilise fgets, je doit specifier un nombre de caracteres, que je ne connais pas.
Est-ce possible de faire arreter fscanf au bout de la ligne?
Comment est-ce que je peux ensuite commencer la lecture de la deuxieme ligne de code?
Je suis desolee pour tout le trouble, je n'en connais pas beaucoup au sujet de la lecture de fichiers.
Merci,
Aline
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
24 nov. 2007 à 07:25
24 nov. 2007 à 07:25
Salut,
Avec fgets(), tu spécifies la longueur maximum de caractères à copier dans le buffer, mais cela s'arrêtera en fin de ligne dans tous les cas. Donc tu mets une valeur grande. De plus, cette méthode est conseillée de brider le nombre maximum de caractère afin d'éviter des attaques de type débordement de tampons
Cordialement.
Avec fgets(), tu spécifies la longueur maximum de caractères à copier dans le buffer, mais cela s'arrêtera en fin de ligne dans tous les cas. Donc tu mets une valeur grande. De plus, cette méthode est conseillée de brider le nombre maximum de caractère afin d'éviter des attaques de type débordement de tampons
Cordialement.