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

Résolu
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008 - 28 mai 2008 à 22:06
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008 - 29 mai 2008 à 13:53
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

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
29 mai 2008 à 13:15
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
3
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
29 mai 2008 à 10:02
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
0
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008
29 mai 2008 à 12:38
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.
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
29 mai 2008 à 13:24
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
0

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

Posez votre question
cs_amentag Messages postés 13 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 5 juin 2008
29 mai 2008 à 13:53
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.
0