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

Fermé
dingue - 17 déc. 2013 à 19:18
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 déc. 2013 à 16:04
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
17 déc. 2013 à 22:28
Bonjour,
Et c'est quoi la question ? En quoi pouvons-nous t'aider ?
0
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
18 déc. 2013 à 01:46
qu'as-tu fait pour l'instant? as-tu un code à nous montrer? as-tu exploré des pistes?
0
#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 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 1 099
Modifié par [Dal] le 18/12/2013 à 16:07
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
18 déc. 2013 à 16:04
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