comment j peux copier le contenue d un fichier dans un tableau de string :? merci
Version imprimable
comment j peux copier le contenue d un fichier dans un tableau de string :? merci
Salut,
D'abord tu ouvres ton fichier => fopen
Ensuite tu le parcours => fscanf ou fgets
en l'enregistrant dans une chaine
Tu fermes le fichier => fclose
Typiquement :
Cordialement. Pas de commentaire pour que tu réfléchisses un peu ^^Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 void file_close(FILE *p) { if( fclose(p) != 0 ) { fprintf(stderr,"file_close ; FILE@%d ; CODERR : %s\n", p, strerror(perror)); p=NULL; } else fclose(p); } FILE *file_open(char *p, const char *r) { FILE *f = NULL; if ( (f=fopen(p,r)) == NULL ) { fprintf(stderr,"file_open(\"%s\",\"%s\") ; CODERR : %s\n", p, r, strerror(perror)); return NULL; } return f; } unsigned int file_count_character( char *p ) { char c; unsigned int l = 0; FILE *f = file_open(p,"r"); while( fscanf(f,"%c",&c) != EOF ) l++; file_close(f); return l; } char *file_to_string(char *p) // p le chemin du fichier { char c; unsigned int i = 0; char *s = allocate_1D_char_ptr( file_count_character(p)*sizeof(char) ); FILE *f = file_open(p,"r"); while( fscanf(f,"%c",&c) != EOF ) { s[i] = c; i++; } file_close(f); return s; }
EDIT : Au passage, avant que tu te fasses réprimander plus durement, la base quand on demande de l'aide, c'est Bonjour;s'il vous plait;Merci; +orthographe.
Euh, pourquoi la première chaîne n'est-elle pas const?Citation:
Code:FILE *file_open(char *p, const char *r)
Bonjour,
Le code proposé par darkwall_37 est correct, bien que, à la ligne 10, on a un comportement dangereux (sûrement une faute de frappe, ou quelque chose dans le genre), car tu essaies de fermer une seconde fois le fichier. En outre, la ligne 7 (affectation de NULL à p) est au passage inutile car on agit sur une variable locale. Du point de vue de la stratégie globale, je ne suis pas fanatique des lectures de fichier à plusieurs reprises (d'autant plus que, dans le code proposé, le fichier est ouvert puis parcouru deux fois, ce qui n'est pas un algorithme très efficace).
D'ailleurs, tout dépend de ce qu'on cherche à en faire ensuite, mais une bonne idée serait d'utiliser une liste chaînée pour lire le fichier en entier, ligne par ligne (un peu comme l'éditeur de texte ed). L'avantage est qu'on a une structure de donnée flexible, qui ne nécessite qu'une taille plafond pour une ligne si on veut faire un peu de statique (il existe notamment une macroconstante POSIX pour faire cela, c'est donc assez simple). L'inconvénient est que l'accès aléatoire est catastrophique, mais, en pratique, c'est finalement plutôt rare d'en avoir besoin sur un fichier (ou alors, on a déjà des tailles plafonds car ce sont des formats de fichier bien définis). En fait, je crois qu'on manque d'informations sur le problème. :mouarf:
Bonne journée.