Rechercher : dans
Par :

Lire un fichier en C

Dernière réponse le 24 mai 2009 à 20:06:13 Laura, le 13 nov 2003 à 09:54:05 
 Signaler ce message aux modérateurs

Bonjour a tous,
Je suis en train de faire un petit programme qui lit un fichier "FILES", dont il y a un nombre entier qui represente le nombres de fichier a lire, et les noms des fichiers qu"il faut lire.
Par exemple FILES peut contenir 1G, donc ici on a un fichier a lire, et le fichier säppelle G.
Je stock ces deux variables dans FileNum(pour le nombre de fichier), et je stock le nom du fichier dans le pointeur *fich.
Lee programme compile bien.
Laa valeur de fich, lorsque je l"imprime esst bien G.
Mais a la fin du programme lorsque je demande d"ouvrir le fichier jäi le message d"erreur : Le fichier ne veut pas s"ouvrire !
Je demande a tout ceux qui peuvent de l"aide.
Merci

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

FILE *fptrNO,*File;
int FileNum,i,j,k;
char *fich;

int main()
{
if((fptrNO=fopen("FILES","r"))==NULL) { printf("Le fichier FILES ne veut pas s"ouvrire! \n"); exit(1);}

/* on va lire le fichier ligne par ligne et executer le programme a chaque fois */

fscanf(fptrNO,"%d",&FileNum);

for (i=1;i<=FileNum;i++)
{
fscanf(fptrNO,"%c",&fich);
printf("\n %c\n \n",fich);

if((File=fopen("fich","r"))==NULL) { printf("Le fichier ne veut pas s"ouvrire ! \n"); }

}
return 0;
}

Meilleures réponses pour « Lire un fichier en C » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Fichier CDA VoirFormat CDA Un fichier CDA est le plus souvent un fichier-"plage" (ou "piste") directement issu d'un CD audio. Lire un fichier CDA Pour lire de tels fichiers, il suffit de télécharger un lecteur capable de lire les CD audio, par exemple...
Fichier ISO (Image ISO) VoirFormat ISO Un fichier possédant l'extension .ISO est une image ISO, c'est-à-dire une image d'un disque (CD, DVD ou disque dur) sous forme de fichier, créer avec un logiciel de gravure. Comment lire un fichier ISO ? En l'absence de graveur, il...
Fichier BIN VoirFormat BIN Les fichiers BIN et CUE sont respectivement : .BIN : une image de CD, c'est-à-dire une copie binaire d'un CD ou d'un DVD sous forme d'un fichier .CUE : informations sur les pistes du disque. Comment lire un fichier BIN ? Les...

1

Bob, le 13 nov 2003 à 10:14:53

Une belle ratatouille ce code là :-D .
Pour ouvrir convenablement un fichier en lecture seule:

/* Portion de code */

#include <stdio.h>
#include <stdlib.h>

FILE *stream;
stream = fopen("c:\\fichier.txt", "r");
if(stream = NULL)
{
printf("Le fichier n'existe pas");
}
else
{
printf("Le fichier existe et est ouvert en lecture seule");
}
fclose(stream);

Répondre à Bob

2

Laura, le 13 nov 2003 à 10:34:03

Ceci ne repondd pas a ma question, c"est juste une jolie facon d"ecrire le meme code.
Alors svp s"il ya quelqu"un qui peut vraiment m"aider a trouver le pb ca sera sympa, jäi vraiment besoin de savoir ce qui cloche, et comment ouvrir le fichier "fich"

Répondre à Laura

3

Bob, le 13 nov 2003 à 10:39:49

Le problème est que tu n'ouvres aucun fichier dans ton code, tu vérifie seulement si il existe.

Répondre à Bob

4

Laura, le 13 nov 2003 à 10:47:05

Ah d"accord mais je ne vois vraiment pas pourquoi tout d"abord elle n"arrivee pas a trouver lle fichier G, car se fichier existe bien, pourquoi est ce que cee programme me renvoi le messagee d"erreur
PS: je suis un peu nouvelle dans ce domaine !!!

Répondre à Laura

5

Bob, le 13 nov 2003 à 10:48:59

Je prend un extrait:

if((fptrNO=fopen("FILES","r"))==NULL) { printf("Le fichier FILES ne veut pas s"ouvrire! \n"); exit(1);}

Je traduit:

Si j'essaie d'ouvrir le fichier et qu'il me donne une valeur nulle j'affiche le message "..." sinon je quitte donc finalement le fichier n'est pas ouvert.

Répondre à Bob

8

Laura, le 13 nov 2003 à 10:58:19

Merci pour tes reponses, maiss je pense que tu as mal compris mes qustions.
Quand je scan ce qu"il ya d"ecrit dans le fichier FILES, ca marche.
Par contre ca nee marche pas dans le cas de
if((File=fopen("fich","r"))==NULL) { printf("Le fichier ne veut pas s"ouvrire ! \n"); }

En fait fich est un nom de fichier que j"ai scanee dans le fichier FILES
esst la il mee dit que le fichier pointeer par fich n"existe pas ...pourquoi ?

Répondre à Laura

9

Bob, le 13 nov 2003 à 11:03:51

C'est que probablement que le fichier "fich" n'existe pas puisque ton "if()" a détecté une valeur nulle. As tu au moins un fichier sur le disque qui s'appelle "fich" dans le répertoire de l'application?

Répondre à Bob

6

Bob, le 13 nov 2003 à 10:55:56

#include <stdio.h>
#include <stdlib.h>

FILE *fptrNO;
fptrNO = fopen("files", "r"); // "files" doit être dans le répertoire local à l'application

A partir de la le fichier peut être ouvert si il existe et que l'adresse est correcte maisdans le cas contraire tu auras un bug donc c'est pour ça que l'on met un "if()" pour vérifier que le fichier peut être ouvert sinon on ne réalise aucune opération sur ce fichier qui n'existe pas.

Répondre à Bob

7

Bob, le 13 nov 2003 à 10:57:51

Sans oublier de faire:

fclose(fptr); // libère le pointeur de flux de données

Répondre à Bob

10

Laura, le 13 nov 2003 à 11:10:02

Merci pour tes reponses.
le fichier que je veux ouvrir esst bien dans lle repertoire courant mais le message d"erreur revient.
Il ne reconnaitt pas le fichier.
Je pense que ca vient du fait, que je pointe sur lle nom du fichier que je saisi danss le fichier FILES avec le pointeur fich...mais quand j"essai d"ouvrir fich Ca ne marche pas.
Et je ne saiss pas comment resoudre cec probleme .

Répondre à Laura

11

Bob, le 13 nov 2003 à 11:12:36

Bon laisse moi 5' je vais réarranger ce code et tu me diras si cela te convient.

Répondre à Bob

12

Bob, le 13 nov 2003 à 11:21:17

Et ben bon dieu faut décortiquer ce que souhaitais faire parce que la logique du code je la cherche toujours ;-) .

Répondre à Bob

14

Laura, le 13 nov 2003 à 11:31:46

Excuse mon code, et merci pour ton aide
mais en fait ce que je veux faire, cést lire un fichier qui contient des noms dee plusieurs fichiers.
ensuite je veux ouvrir ces fichiers unne aa une pour les lires.
Cést pour cette raison que je definis un fileNum c"est lle nombre de fichier que je dois lire.
Donc j"ai fait un petit essai ,j"arrivve bien a lire le ppremier fichier ou il y a le nom de fichier que jje dois consuleter, mais une fois que je vous ouvrir ce fichier ca nne marchhe plus.

Répondre à Laura

13

Bob, le 13 nov 2003 à 11:31:30

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

int main()
{
FILE *fptrNO,*File;
int FileNum,i,j,k;
char *fich;
fptrNO = fopen("files", "r");
if(fptrNO != NULL)
{
fscanf(fptrNO, "%d", &FileNum);
for (i = 1; i < FileNum + 1; i++)
{
fscanf(fptrNO,"%c",&fich);
printf("\n %c\n \n",fich);
File = fopen("fich","r");
if(File != NULL)
{
/* instructions */
}
}
}
fclose(fptrNO);
return EXIT_SUCCESS;
}

Un 1er jet pour ouvrir les fichiers.

Répondre à Bob

15

Laura, le 13 nov 2003 à 11:34:03

Excuse mon code, et merci beaucoup pour ton aide
mais en fait ce que je veux faire, cést lire un fichier qui contient des noms dee plusieurs fichiers.
ensuite je veux ouvrir ces fichiers unne aa une pour les lires.
Cést pour cette raison que je definis un fileNum c"est lle nombre de fichier que je dois lire.
Donc j"ai fait un petit essai ,j"arrivve bien a lire le ppremier fichier ou il y a le nom de fichier que jje dois consuleter, mais une fois que je vous ouvrir ce fichier ca nne marchhe plus.

Je vais essayer ton code

Répondre à Laura

16

Bob, le 13 nov 2003 à 11:34:30

J'ai oublié de dire que tes variable déclaré hors bloc sont globales et c'est à éviter quand ce n'est pas nécessaire car ça consomme de la mémoire inutilement, du moins trop longtemps.

Répondre à Bob

17

Bob, le 13 nov 2003 à 11:36:46

C'est possible d'avoir le contenu du fichier "files" pour voir la tête que ça? ou un exemple pour voir l'organisation.

Répondre à Bob

29

enitbasma, le 25 jun 2008 à 17:23:33

Salut

je ne sais pas si vous rappelez encore de C.

mais bon j'ai mets dans un fichier un ensemble de requetes dont je veux executer par une fonction qui s'appeler usqlexec dans ca pour tester la rupestesse du serveur

dc je dois ouvrir le fichier (ca je le connais) et le parcourir ligne par ligne et à chaque ligne il fait appel à la fonction

je ne sais pas si vous pouvez m'aider.

voici la partie que je veux la transformer

void *thread1()
{
char query[512];
static int test_id=1;
int reccount=0,i;
int ErrCode;
uSQLCdb *udb;


udb=uSQLCopen(user,passn,server,3002,5000,&ErrCode);
if(udb)
{


while(test_id<=3)
{

switch(test_id)
{
case 1: {printf("thread A : premier test:: select * from test whedddre foo='baa'\n\r");
strcpy(query,"select * from test");
}
break;
case 2: {printf("thread A : deuxieme test:: insert into test values ('bloooo')\n\r");
strcpy(query, "insert into test values ('blaaaaa')");}
break;
case 3: {printf("thread A : troisieme test:: update test set foo='ffffff' where foo='jjjj'\n\r");
strcpy(query, "update test set foo='hhhhhh' ");}
break;
default:
break;
}

printf("Thread A:test_id :%d\n\r",test_id);
for (i=0; i<5; i++)
{
printf("la requête du thread A numero %d\n\r",i);
ErrCode=uSQLCexec(udb,(char *)query,dcallback1,NULL,ecallback1);
printf("\n thread A: Connected with User Level %i\n",udb->seclevel);
//fprintf(stderr,"\nThread A Error %i : %i Records\n",ErrCode,reccount);
if(test_id == 2 || test_id == 3)
i = 5;
}
test_id ++;
}
}
else
{
fprintf(stderr,"\n\nThread A can not establish connection with the server. Error code:%i\n\n",ErrCode);
}
uSQLCclose(udb);
fclose(fich);
return NULL;
}
//////////////////////////////////////////////////////////////////////////////////////////////////


je l'ai transformer comme ci mais je ne sais pas quoi faire apres pour parcourir le fichier


void *thread1()
{ FILE * fich;
char query[512];
static int test_id=1;
int reccount=0,i;
int ErrCode;
uSQLCdb *udb;
fich = fopen("/home/stagiaire/workspace/USqlite/install/var/files/threadA",r);
if(!fich) erreur;
udb=uSQLCopen(user,passn,server,3002,5000,&ErrCode);
if(udb)
{
while(!foef(fich))
{ fscanf (FILE * fich);

// while(test_id<=3)
// {
//
// switch(test_id)
// {
// case 1: {printf("thread A : premier test:: select * from test whedddre foo='baa'\n\r");
// strcpy(query,"select * from test");
// }
// break;
// case 2: {printf("thread A : deuxieme test:: insert into test values ('bloooo')\n\r");
// strcpy(query, "insert into test values ('blaaaaa')");}
// break;
// case 3: {printf("thread A : troisieme test:: update test set foo='ffffff' where foo='jjjj'\n\r");
// strcpy(query, "update test set foo='hhhhhh' ");}
// break;
// default:
// break;
// }

printf("Thread A:test_id :%d\n\r",test_id);
for (i=0; i<5; i++)
{ ///////////////////executer query////////////////////////
printf("la requête du thread A numero %d\n\r",i);
ErrCode=uSQLCexec(udb,(char *)query,dcallback1,NULL,ecallback1);
printf("\n thread A: Connected with User Level %i\n",udb->seclevel);
//fprintf(stderr,"\nThread A Error %i : %i Records\n",ErrCode,reccount);
if(test_id == 2 || test_id == 3)
i = 5;
}
test_id ++;
}
}
else
{
fprintf(stderr,"\n\nThread A can not establish connection with the server. Error code:%i\n\n",ErrCode);
}
uSQLCclose(udb);
fclose(fich);
return NULL;
}

/////////////////////////////////////////////////

merci de me repondre


je suis tres besoin de votre aide car je suis coincé

Répondre à enitbasma

18

Laura, le 13 nov 2003 à 12:40:43

Excuse moi j"ai du me deconnecter pour quelque temps.
un exemple tout simple du contenu du fichier FILES est 1G avec 1 le nombre de fichier a lire, et G le nom du fichier a lire.
G est un fichier qui contient un texte.
Merci

Répondre à Laura

19

Bob, le 13 nov 2003 à 12:56:52

Si tu mets ton fichier dans une chaine de caractère par "fread()" tu pourras par la suite la traiter pour tirer les informations qui t'intéressent. Par exemple si le 1er caractère de la chaine est un chiffre alors tu le copie dans un tableau etc jusqu"à extraire le nombre désiré. L'avantage de traiter le fichier par une chaine de caractère c'est d'avoir la facilité de traitement et par la même occasion éviter l'acces au disque dur ("fseek()", "fsetpos()" déplacent la tête de lecture/écriture) qui est plus coûteux en temps que le traitement en mémoire vive.

Répondre à Bob

20

tilteur, le 13 nov 2003 à 14:10:29

Salut tout le monde
est ce ke vous savez commen on fé pour lire un fichier en vb svp.
merci d'avance

Répondre à tilteur

21

Jerry21, le 14 nov 2003 à 06:48:07

Avec Visual Basic :)

Ne prend pas ton temps car le temps ne t'attend pas.

Répondre à Jerry21

22

abdelhak, le 14 nov 2003 à 09:52:30

Bonjour
déjà, pour repondre a la demoiselle qui pose sa question sur l'ouverture, la lecture propre sequentielle mode texte formatté d'un simple file, je suis sur qu'elle peut trouver toute seule en respectant certes, comme elle dis ' c du joli code ca',une certaine discipline de programmation parce que en c, surtout le c_ansi, il neput pas y avoir de l'a peu pres, c du pointu, c tout.

Donc, par ex, quand je lis et comprends ( à moitié bien sûr etant donné que le programme est comprehensible seulement par rapport à son degré de discipline de developpement par rapport au standart ansi_c...) la valeur de retour de la fonction main avec return EXIT_SUCCESS, ben laissez moi vs dire que la, c deja pas du propre car il aurait aussi fallut declarer la vraie definition de la fonction main, meme si ns travaillons pas en environnement de shell commande, d'invite de commande si vs preferez ( int argc, char*argv[], char*enp[])+ le fichier en tête correspondant et contenant la definition de la fonction renvoyant ce genre de code de retour pour main à l'environnement OS.
Ceci etant dis,
revenons dans le sujet posté par cette demoiselle:
LIRE UN FICHIER QUI CONTIENT DES AUTRES NOMS DE FICHIERS??

Ben , déjà, ton fichier contenant ces fameux autres noms doit préalablement exister.
ensuite, tout depend du mode avec lequel tu accèdes à ces fichiers, comprends tu??
il fo trop bien differencier le mode texte du mode binaire

A MON AVIS, celui qui es dans le vrai pour le moment, c BOB
c le seul qui approche le c propre et dans les règles.
ton code du debut mademoiselle et ce que l'on appelle, du spaghettos ou spaghettis si tu es italienne lol

Si par exemple, tu as specifié un numero de fichier correspodant à un fichier se trouvant dans le fichier contenant tous les autres fichiers auxquels tu desires acceder comm bon te sembles, et que, le fichier selectionner n'est qu'un fichier binaire, c'est à dire, non formatté, genre un executable, un classeur excel, une base de données access, là il te faudra reflechir car ce n'est pas aussi simple que tu le penses.

Avec le mode binaire du c_ansi, tu pourras lire et ecrire dans les streams comme bon te sembles, mais, tout ce que tu auras à l'ecran, ce sera le courant binaire tel qu'il aura ete copier et lu dans un buffer avec fread et fwrite.
avec du mode texte, avec fgetc, fputc pour lire et ecrire caractere /caractere, avec fgets et fputs, "" lignes / lignes, et un autre acces special , l'aleatoire, qui fonctionne avec les enregistrements mais en mode binaire,tu auras à l'ecran pour un simple file en texte formatté exactement ce que tu auras lu ou ecrits, par contre, avec les executables, cela va te surprendre , tu n'auras qu'à essayer.
TON PROBLEME C QUE TU AS PAS COMPRIS COMMENT FONCTIONNE LE LANGAGE DE PROGRAMMATION C, qui en apparence,n je vs l'accorde est simple, mais, qui dans les details, ne peut etre compris que par les plus ferus, ca c clair


bonne chances
abdel

Répondre à abdelhak

23

bayoud ahmed, le 5 jun 2004 à 18:51:27

Je cherche une définition du fichier inclus en C et une comparaison entre le pascal et le langage c

Répondre à bayoud ahmed

24

Bem, le 5 jun 2004 à 19:33:42
Répondre à Bem

25

ahmed, le 5 jun 2004 à 21:21:14

Ql est intéret des overlay ds le langage pascal et est ce ils existe ds le langage C

Répondre à ahmed

26

philtrain, le 5 jun 2004 à 23:11:16

Bonsoir,
(a Tilteur et Ahmed, il vaudrait mieux ouvrir un nouveau thread .)

Laura,

voici ton code un peu corrigé, je l'ai compilé et il fonctionne sans problème chez moi. J'ai créé un fichier FILES contenant 1G et un fichier G (vide) pour le tester:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

FILE *fptrNO,*File;
int FileNum,i,j,k;
char fich [2]; //<--correction

int main() {
if((fptrNO=fopen(

Répondre à philtrain

27

El tazz, le 6 aoû 2004 à 03:11:53

Salut Laura, je sais que beaucoup de temps est passé mais comme j'étudie pour mon examen de C, j'ai découvert ta faute, cella que personne n'a vue. Tout est correct (à part ta technique de programmation confuse) mais le problème principal c'est que tu as mis FICH entre guillemets; alors, il le prend pour un littéral, ce qui fait que la valeur que tu as lue dans ton fichier (G) qui est en fait le nom du fichier que tu désirais ouvrir n'est pas prise en compte.

JE pense que c'est ça et après tout s'est emmelé dans la discussion.. pas facile d'être compris.
J'ai pas testé mais c'est à vvue d'oeil.
Si je me trompe ignorez ce message.

Ciao!

Répondre à El tazz

28

abdessamdelharraz, le 10 jan 2008 à 22:44:41

Peut etre ta oublié l'extension des fichiers à lire(.txt)

Répondre à abdessamdelharraz

30

 najib87, le 24 mai 2009 à 20:06:13

Salut tou monde
comment peut on traiter un fichier xml en c

Répondre à najib87