Recuperer des mots dans un fichier texte et les stocker dans un tableau. [Résolu]

cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention - 28 mai 2008 à 22:06 - Dernière réponse : cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention
- 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.
Afficher la suite 

5 réponses

Répondre au sujet
cs_jfrancois 482 Messages postés vendredi 26 août 2005Date d'inscription 5 décembre 2009 Dernière intervention - 29 mai 2008 à 13:15
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jfrancois
BunoCS 13764 Messages postés lundi 11 juillet 2005Date d'inscription 20 avril 2018 Dernière intervention - 29 mai 2008 à 10:02
0
Utile
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
Commenter la réponse de BunoCS
cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention - 29 mai 2008 à 12:38
0
Utile
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.
Commenter la réponse de cs_amentag
cs_jfrancois 482 Messages postés vendredi 26 août 2005Date d'inscription 5 décembre 2009 Dernière intervention - 29 mai 2008 à 13:24
0
Utile
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
Commenter la réponse de cs_jfrancois
cs_amentag 13 Messages postés mardi 7 novembre 2006Date d'inscription 5 juin 2008 Dernière intervention - 29 mai 2008 à 13:53
0
Utile
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.
Commenter la réponse de cs_amentag

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.