Lecture aléatoire des caractères d'un fichier

dingue -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'écris un code pour ressortir de façon aléatoire des caractères saisie dans un fichier et cela un nombre de fois
Merci pour votre attention


A voir également:

5 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
Et c'est quoi la question ? En quoi pouvons-nous t'aider ?
0
dingue
 
je voudrais faire ressortir dans une variable des caractères lus aléatoirement dans un fichier contenant ces caractères dans un certain ordre.
j'ai beau réfléchi ,je trouve pas comment je pourrais faire.
pouvez vous me secourir svp??
merci
0
Utilisateur anonyme
 
qu'as-tu fait pour l'instant? as-tu un code à nous montrer? as-tu exploré des pistes?
0
dingue
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <errno.h>
#include <fcntl.h> /*O_RDONLY*/
#define TAILLE_MESSAGE 256 /* Correspond à la taille de la chaîne à écrire */

int main(void)
{
pid_t pid_fils;
int fd1;char c;

/* lecture du fichier composant.txt */

fd1=open ("composant.txt",O_RDONLY,0);
read(fd1,&c,1);
printf("c=%c\n",c);


int descripteurTube[2];
char messageEcrire[TAILLE_MESSAGE];

pipe(descripteurTube);

pid_fils = fork();
if(pid_fils != 0) /* Processus père */
{
sprintf(messageEcrire,"(c)" ); /* La fonction sprintf permet de remplir une chaîne de caractère avec un texte donné */
write(descripteurTube[1], messageEcrire, TAILLE_MESSAGE);
}

return EXIT_SUCCESS;
}





ce code ne lit que la premiere lettre du fichier composant
moi je voudrais faire lire de façon alternative plus d'un élément
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Salut dingue,

Une approche raisonnable serait de :

1- déterminer la taille de ton fichier, exemple (taille_fich) et le nombre de caractères à afficher (car_max, qui devra être au moins égal à taille_fich sans les retours à la ligne...), et mettre à zéro un compteur de caractères (compteur)
2- allouer un espace mémoire suffisant pour accueillir les données qu'il contient (tampon)
3- lire les données qu'il contient dans cet espace
4- tirer au sort un nombre entre 0 et taille_fich-1
5- afficher le caractère dans tampon à cet endroit sauf si c'est un \n
6- si c'est un \n, revenir à 4
7- sinon incrémenter compteur, et mettre le caractère dans tampon à cet endroit à \n (cela te permettra de savoir que celui-là n'est plus affichable)
8- si le compteur est égal à car_max, on a terminé
9- sinon, on boucle sur 4

Par rapport à ton code que tu postes là...

Pour lire plus d'un caractère, tu dois ... lire plus d'un caractère.

Si en 3ème argument de read tu mets 1, tu n'en lira pas plus.

man 2 read

Bien sûr, en 2ème argument tu devra mettre le tampon évoqué ci-dessus.

Il y a une raison pour laquelle tu utilises des fonctions POSIX open et read au lieu des fonctions standard du C fopen et fread ?

Par ailleurs, je ne comprends pas pourquoi tu pipe() ou fork(), et
sprintf(messageEcrire,"(c)" );
va juste écrire dans ton tampon "(c)", et non pas ce que tu as récupéré.


Dal
0

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

Posez votre question
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Pourquoi utiliser des fonctions non standards ?
Utilise plutôt fopen(), fgetc() et fclose(). Ca sera plus simple, lisible et portable.
Pourquoi utiliser un fork ?
Pour lire un certain nombre de fois, il te suffit de tirer un nombre pseudo aléatoire (via srand() puis rand()).
0