mleclaire
Messages postés15Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention18 mars 2007
-
8 mars 2006 à 09:01
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
10 mars 2006 à 01:46
Bonjour je suis débutant en programmation,je suis en train de programmer en c++ builder,est ce que c'est possible d'utiliser scanf()?
si oui,je voudrait récuperer un mot dans une ligne.
ex de ligne:
aaaa;bbbb;cccc;dddd;eeee
ffff;gggg;hhhh;iiii;jjjj
comment je doit faire si je veut avoir le deuxième mot ds chaque ligne de mon fichier texte?
meme question pour le premier et le troisième mot de chaque ligne?
et meme question pour une ligne?
merci d'avance pour vos réponse clair vu ke je suis un débutant!!
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 8 mars 2006 à 23:35
Non, ce que je t'ai donné est pour utiliser les fonctions de la famille de scanf (fscanf, sscanf...)
Pour lire le fichier en entier, faire comme la marque Guillemouze.
char nb; //Numero du mot a lire
file = fopen(...)
while (!feof(file))
{
fscanf(file, "%*[^;\n\0];%[^;\n\0];%*[^\n\0]", buffer); //Second mot de chaque ligne
//On a lu toute la ligne, donc on passe de ligne en ligne dans le fichier.
//le dernier %*[^\n\0] permet de s'assurer de la lecture de tout le reste de la ligne.
... //Ici tu traites ton mot.
}
Si tu veux lire tous les mots de ta ligne en une seule passe:
Il faut que tu charges toute ta ligne dans un buffer avec %[^\n\0].
Ensuite tu parcours ta chaine pour compter le nombre de ; (on le notera nb) ca veut dire qu'il y a nb+1 mot.
Tu fais une boucle qui te lis ensuite les mots.
nbcar=0;
for (i = 0; i < nb + 1; i++)
{
sscanf(ligne+nbcar, "%[^;\n\0];", buffer);
nbcar += strlen(buffer) + 1; //+1 pour le ; non pris dans buffer mais lu dans sscanf.
//Tu peux aussi utiliser un tableau de chaines de carcatères pour lire tes mots.
//Enfin, ca c'est toi qui voit en fonction de ce que tu veux faire avec tes mots, et de combien de temps ils te servent.
}
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 8 mars 2006 à 23:38
Ah si, pour Guillemouze.
Quand tu utilises %s dans les fonctions de la famille scanf, tu lis jusqu'a renconter un caractère blanc (espace, tabulation, fin de ligne...) C'est pour ca que ca ne fonctionnait pas avec ta solution.
D'autre part, la grande utilité de %[] est de pouvoir lire des lignes entieres, sans se soucier de ces dits caracteres blancs.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 8 mars 2006 à 23:49
mleclaire, si tu veux lire un mot de ta ligne en particulier, je te conseilles de faire une fonction de ce style:
//renvoie 0 en cas de réussite, un code d'erreur non nul autrement
unsigned char readWord(FILE *ptr_file, char *word, unsigned char nb)
{
if (word) //Il faut que word soit alloué
{
unsigned char nb = 0, len;
char ligne[255];
fscanf(ptr_file, "%[^\n\0]", ligne); //Lecture de tte la ligne
len = strlen(ligne);
for (i = 0; i < nb, nbcar <= len ; i++) //Je suis pas certain du <=, a tester
{
sscanf(ligne+nbcar, "%[^;\n\0];", word);
nbcar += strlen(word) + 1; //+1 pour le ; non pris dans buffer mais lu dans sscanf.
}
if (nbcar > len)
{
*word='\0';
return 2;
}
return 0;
}
return 1;
}
En lisant toute ta ligne, au moins tu pourras lire le mot que tu veux.
Le mieux serait de lire ta ligne dans une fonction, puis les mots dans une autre.
Comme ca tu ne lis ta ligne qu'une seule fois.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 9 mars 2006 à 22:19
Vérifie que lecture est valide. (!= -1).
Sinon, envoie moi ton con code (et le fichier texte), je regarderais pourquoi ça marche pas.
Tu peux aussi essayer de retirer le t du fopen, je ne l'ai jamais utilisé, peut etre que... mais j'en doute.
Affiche aussi dans la console le contenu de buffer[0] par un printf. Tu t'assureras ainsi qu'il n'a pas lu et que ce n'est pas ta fonction d'affichage dans la listbox qui marche pas.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]