Lire un fichier .txt dans C

Résolu/Fermé
heonmap Messages postés 4 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 18 juin 2009 - 15 juin 2009 à 06:54
heonmap Messages postés 4 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 18 juin 2009 - 18 juin 2009 à 22:08
Bonjour,
J'ai un pb quand je veux importer les donne'es dans 1 fichier data.txt. Ce fichier contient les suites des re'els, par ex:

12 3 88 98 46 4392
23 4324 43243 29 4328 123 432
32 438 123 4382 32 99 123 324 5409

Il contient 270 lignes et les nombres des re'els sur chaque ligne sont diffe'rents.Je voudrais e'crire un petit program en C , pour lire des donne'es dans ce fichier ( et les utilisent apre`s pour faire des calculs ) .Mon ide'e est que je vais sauve-garder les donne'es dans 1 matrice mais j'arrive pas a` le faire.
Qq pourrait m'aider ? Merci d'avance.
A voir également:

5 réponses

DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
15 juin 2009 à 13:58
je ne comprend pas bien tout ton code mais bon

tout d'abord pourquoi ça
static const char filename[] = "./data.txt";
fich3 = fopen ( filename, "r" );
au lieu de ça
fich3 = fopen ("./data.txt","r+");
je prend moins de place déjà et je prend le droit d'écrire et de lire sur le fichier, c'est simplement au cas ou
ensuite tu test l'ouverture c'est bien et je ne vois pas d'erreur par contre pourquoi le restester dans le else
if(fich3==NULL) {
printf("Error: can't open file.\n");
return 1;
}
else {
printf("File opened successfully.\n");
i = 0 ;
/****Ici tu ne rentrera jamais dans ce if puisque tu es dans le cas ou la condition est égale à "fich3 est égale à tout sauf NULL*****/
if(fich3==NULL) {
printf("Error: can't open file.\n");
return 1;
}
/****donc ici le else ne sert à rien non plus
else {
printf("File opened successfully.\n");
/*** ici tu rouvre un fichier pour sauvegarder, n'étant pas un pro de la gestion de fichier en C je te conseillerais dans un premier temps de créer toi même le fichier save.txt de prendre le chemin relatif puis d'ouvrir ce fichier toujours en r+
le mode création bug parfois et il est difficile de le debug****/
FILE*fp=fopen("save.txt","w");

ensuite le reste est assez confus

je ne vois pas bien ce que tu fais et je ne comprend plus ce que tu souhaite faire
je t'aiderais autant que faire se peux
mais il faut que je sois sûre de ce que tu souhaite
2
DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
15 juin 2009 à 07:34
la partie fichier en C n'est pas celle que je préfère le codage binaire merde souvent dans l'écriture^^
mais si tu veux écrire dans un fichier ce n'est pas plus simple que fwrite ( je te laisse rechercher l'utilisation de cette fonction sur internet pour lire il y a fread

sinon tu peux aussi utiliser fscanf ou fprintf mais pour commencer utilise les deux autres fonctions elles sont plus simples à comprendre et plus facile à utiliser

si tu rencontre des problèmes pour utiliser ces fonctions je t'aiderais, pour l'instant je te met sur la voie

c'est en galérant que l'on apprend le mieux
0
heonmap Messages postés 4 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 18 juin 2009
15 juin 2009 à 12:56
Bonjour,
Merci de ta réponse,
Cependant, je n'arrive pas à le faire. Je suis tout bête...
Voici mon programme avec fscanf et fprintf :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <ctype.h>
#include <time.h>
#include <sys/types.h>
int main ( void )
{
FILE *fich3;
int i, j,N=270;
int numbers[N]; // je définis un tableau pour sauve-garder les valeurs dans les lignes,pour chaque itération. le fichier data.txt a 270 lignes,mais les nombres des éléments sur chaque ligne ne sont pas constants.Je définit un tableau avec la dimension comme ça pour avoir un "largeur" suffisant à sauve-garder les éléments

static const char filename[] = "./data.txt";
fich3 = fopen ( filename, "r" );
if(fich3==NULL) {
printf("Error: can't open file.\n");
return 1;
}
else {
printf("File opened successfully.\n");
i = 0 ;
if(fich3==NULL) {
printf("Error: can't open file.\n");
return 1;
}
else {
printf("File opened successfully.\n");
FILE*fp=fopen("save.txt","w");

i = 0 ;
while(!feof(fich3)) {
/* loop through and store the numbers into the array */
for(j=0;j<N;j++)
{ fscanf(fich3, "%d", &numbers[j]);

// je vais faire les calculs avec les éléments ici.

}
fprintf(fp,"%d",numbers[j]); // je teste le programme en imprimant les valeurs dans les lignes chaque fois,malheureusement, ça ne marche pas.
i++;
}
fclose(fp);
fclose(fich3);
return 0;
}
}

je ouvre le fichier data.txt ;en suite,je lis le fichier pour récupérer tous éléments.
Si je fais comme ça, je ne peut pas sortir les résultats comme je veux.
Tu purrais m'indiquer les fautes s'il te plait..
0
heonmap Messages postés 4 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 18 juin 2009
15 juin 2009 à 15:12
comme ton explication est très clair, tu m'as aidé bcp.
Bref,mon probleme est comme ça.
j'ai un fichier data.txt qui contient les entières :
12 555 1233 45 366 655 455 57 42 4246
11 47 68 998 878 755
6 84 876 645 84 5
...........
Ce que je veux maintenant,c'est seulement lire ce fichier,ligne par ligne.Pour chaque ligne, je veux récupérer les valeurs des éléments.Par ex:

for i=0; i< 270 //nombres des lignes
lire chaque ligne
lire chaque valeur
faire les calculs avec chaque valeur dans 1 lignes

Quand je lis tous avec fscanf, je ne récupère que tous les valeurs dans le fichier ,comme le programme ci-dessous.
Je veux sortir les valeurs pour chaque ligne, pour que je puisse les appeler facilement (comme dans la matrice,la valeur j ième dans la ligne i est a[i][j] par exemple )

Tu comprends mon idée?

int main() {
FILE *file,*fp;
int numbers[8000];
/* make sure it is large enough to hold all the data! */
int i,j;

file = fopen("data.txt","r");
if(file==NULL) {
printf("Error: can't open file.\n");
return 1;

}
else {
printf("File opened successfully.\n");

i = 0 ;
while(!feof(file)) {
/* loop through and store the numbers into the array */
fscanf(file, "%d", &numbers[i]);
i++;
}
for(j=0 ; j<i ; j++)
{ /* now print them out 1 by 1 */
printf("%d", numbers[j]);
}
fclose(file);
return 0;
// }
}
0
DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
15 juin 2009 à 15:22
si tu arrive à sortir toutes les valeurs c'est déjà très bien par contre mauvaise nouvelles rien ne permet de lire ligne par ligne
soit avec fscanf tu lis tout le fichier, soit avec fgetc ou fgets tu lis le caractère ou la chaine de caractère
si tu souhaite récupérer ta ligne je ne vois d'autre solution que d'insérer un caractère spécial dans ton fichier pour signaler la fin de ligne comme \n
avec un test approprié tu récupérera tout les éléments de ta ligne et tu pourra opérer comme bon te semble

mais en tout cas les fonctions fscanf fgetc fegts ne détecte pas la fin ni le début d'une ligne, la lecture d'un fichier passe par la tête de lecture on peut passer à la fonction le nombre d'octet à lire mais pas lui dire "je veux que tu me récupère les éléments sur cette ligne"

en espérant t'avoir aidé
0

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

Posez votre question
heonmap Messages postés 4 Date d'inscription lundi 15 juin 2009 Statut Membre Dernière intervention 18 juin 2009
18 juin 2009 à 22:08
J'ai bien re'solu le pb il y a 2 jours.
Merci bien DarkAurora.
0