Recuperer des mots dans un fichier texte et les stocker dans un tableau.

[Résolu]
Signaler
Messages postés
13
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
5 juin 2008
-
Messages postés
13
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
5 juin 2008
-
Bonjour.
Je dispose d'un fichier texte contenant plusieurs mots (sous forme d'une liste) et j'aimerai les récuperer afin de les stocker dans un tableau de caracteres.
Pourriez vous m'aidez?

Désolé du double post mais l'énoncé de ma précédente question etait incorrecte.

Merci.

5 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Bonjour,

La fonction fread() (file read) lit "lSize" octets (le "1") du fichier dans "buffer". Si "lSize" est suffisamment grand (supérieur ou égal à la taille du fichier), c'est tout le fichier qui est lu d'un coup dans "buffer".

Dans "buffer" les mots sont séparés par un caractère contenant le code binaire 10 (new line).

Dans "result" il y a la taille réellement lue = (taille du fichier - nombre de lignes lu) car dans le fichier (Windows !) il y a aussi un code binaire 13 (retour chariot) devant le code 10 mais il est éliminé par fread().

// read the file into the buffer:   <-- plus parlant que copy

result = fread (buffer,1,lSize,pFile);

Jean-François
Messages postés
15112
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 août 2021
98
Salut,
Quel est le souci? Récupérer des mots dans un fichier ou bien les stocker dans un tableau?
Pour le 1er: fopen(), fread(),....,fclose()
Pour le 2nd: je te conseille d'utiliser un vecteur car tu ne connais pas forcément le nombre de chaines à lire...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
13
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
5 juin 2008

Salut,
Merci de m'avoir répondu.^^
J'ai deux question:
Comment fonctionne la fonction fread()?
Elle lit le fichier texte d'un seul coup? si oui ou est-il stocké? (un exemple serai vraiment sympatique^^). Voici un exemple d'utilisation que j'ai trouvé:
      
FILE * pFile;
long lSize;
char * buffer;
size_t result;

pFile = fopen ( "myfile.bin" , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

....
// allocate memory to contain the whole file:
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

Or cette ligne (en rouge) n'est écrit qu'une seule fois et n'est inclut ni dans un while ni dans une boucle fort. Je l'ai essayé, et en fait toute la liste de mot à été inclut dans "buffer" qui est un tableau (mais pas a double entré ).Donc je ne voit pas de moyen pour acceder a un mot en particulier.

Et ma deuxieme question: qu'es-ce qu'un vecteur?

Merci.
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Dans "buffer" les mots sont séparés par un caractère contenant le code binaire 10 (new line).


Ici je parle de mots puisque c'est le contenu du fichier mais dans le cas général il faut comprendre lignes !

Jean-François
Messages postés
13
Date d'inscription
mardi 7 novembre 2006
Statut
Membre
Dernière intervention
5 juin 2008

Merci jfrancois (ainsi que Buno).
Avant d'avoir lu ton message j'etai parvenu à mes fin mais en utilisant la fonction fgetc() qui lit caractere par caractere le fichier texte (je me sui en effet rendu compte que ce qui separait les mot etait le retour à la ligne '\n' ...comment ne l'avai-je pas remarqué plus tot : j'ai cru un moment que c'etait '\0' fin de tableau ce qui n'est pas le cas dans un fichier texte. J'ai donc pu rentrer tous cela dans un tableau) MAIS ta solution est bien plus rapide et optimise mon programme car tout est lu d'un coups.
Merci.