Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1016 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème de lecture formatée dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de lecture formatée dans un fichier

n°310824
spydurmen
Posté le 16-02-2003 à 18:51:14  profilanswer
 

Bonjour à tous...
J'ai un fihcier composé d'un ligne unique et de cette forme:
E001(X),L004(Y),L004(Z),E002(X),...
 
J'aimerais savoir comment faire pour lire cette ligne en récupérant les blocs spérés par une virgule.
 
J'ai réussi à lire caractère par caractère, mais je en sais pas comment faire pour récupérer E001(X) dans une chaine.
 
Je n'ai pas réussi avec %s, mais la solution doit être là.
 
Merci d'avance

mood
Publicité
Posté le 16-02-2003 à 18:51:14  profilanswer
 

n°310829
spydurmen
Posté le 16-02-2003 à 18:56:48  profilanswer
 

En gros je voudrais récupérer un bloc dans une chaine en 1 seule instruction fscanf.
et ensuite je boulcerais juska feof

n°310830
spydurmen
Posté le 16-02-2003 à 18:59:43  profilanswer
 

Je susi débutant...
s'il vous plait répondez, je susis sur ke vous savez tous faire ça!
 
 
Edit:J'ai finalement réussi à lier la chaîen en entier mais toujours pas bloc par bloc


Message édité par spydurmen le 16-02-2003 à 19:01:28
n°310833
Taz
bisounours-codeur
Posté le 16-02-2003 à 19:02:00  profilanswer
 

n'utilise jamais feof, regarde le code de retour de feof

n°310834
spydurmen
Posté le 16-02-2003 à 19:04:04  profilanswer
 

Mais je suppose ke mon problème ne vien pas du feof.*
 
J'essaye jsute de lire un bloc de taille donnnée de chaine de caractère

n°310835
spydurmen
Posté le 16-02-2003 à 19:07:20  profilanswer
 

J'ai réussi c bon, à force de courage
 
Voilà le code au cas où ca intéresse kkun:
 

Code :
  1. FILE * seq;
  2. char* Test;
  3. seq = fopen (argv[1], "r" );
  4. while(!feof(seq)){
  5.         fscanf(seq, "%7s,", &Test);
  6.         printf("%s \n", &Test);
  7. }


Mon erreur de syntaxe était : j'oubliais de mettre & devant Test dans le printf, pensant que Test faisait référence automatiquement à l'adresse(ce ki est tres con de ma part)


Message édité par spydurmen le 16-02-2003 à 19:09:02
n°310837
Taz
bisounours-codeur
Posté le 16-02-2003 à 19:12:05  profilanswer
 

ben t'a tous faux du debut jusqu'à la fin
 
-Test n'est pas alloué
- feof ne doit aps etre employé comme tu le fais, regarde le code de retour de scanf pour détecter la fin de fichier

n°310838
Taz
bisounours-codeur
Posté le 16-02-2003 à 19:14:13  profilanswer
 

allez essaye ça
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.   char bloc[8];
  5.   while(scanf("%7[^,],", bloc) == 1)
  6.     {
  7.       puts(bloc);
  8.     }
  9.   return 0;
  10. }


Message édité par Taz le 16-02-2003 à 19:54:03
n°310839
spydurmen
Posté le 16-02-2003 à 19:15:22  profilanswer
 

++Taz a écrit :

ben t'a tous faux du debut jusqu'à la fin
 
-Test n'est pas alloué
- feof ne doit aps etre employé comme tu le fais, regarde le code de retour de scanf pour détecter la fin de fichier


 
 
Comment ça test n'est pas alloué? C'est le scanf qui l'alloue nan?
 
Et puis feof ca marche aps pourquio? parcke ca détecte des \n?
Merci du conseil

n°310841
spydurmen
Posté le 16-02-2003 à 19:16:40  profilanswer
 

scanf("%7[^,],", bloc
je comprends pas cette ligne, peux-tu me l'expliquer svp?

mood
Publicité
Posté le 16-02-2003 à 19:16:40  profilanswer
 

n°310843
gloop
Posté le 16-02-2003 à 19:18:44  profilanswer
 

Spydurmen a écrit :


 
 
Comment ça test n'est pas alloué? C'est le scanf qui l'alloue nan?
 
Et puis feof ca marche aps pourquio? parcke ca détecte des \n?
Merci du conseil


scanf alloue quedalle, il écrit la ou tu lui demandes, que ce soit alloué ou pas.

n°310844
Taz
bisounours-codeur
Posté le 16-02-2003 à 19:21:08  profilanswer
 

- nan fscanf fait pas ça
 
- pour savoir pourquoi feof marche aps, tuf ais une recherche, je l'ai dit 36000 fois
 
-

Citation :

Variantes de capture de chaîne:
"%10s"    //10 caractères, 11ème '\0' ajouté
"%[abc]"  //uniquement des 'a', 'b' ou 'c'
"%[^abc]" //pas les 'a', 'b' ou 'c'
 
Attention, feof n'est vrai que quand on a tenté de lire au-delà de la fin du fichier. Trop tard !
 
Testé qui marche:
Code :
 
  while(fscanf(f_participants,"%19[^,],%3s\n",NomLu,CodeLu) != EOF)
   printf("- %s\n",NomLu);
 
scanf est l'inverse de printf: le texte en dehors des formats doit correspondre, et est "sauté" en entrée.

 
 
fscanf renvoie le nombre d'éléments correctement convertit, 0 si rien n'a pu etre converti, ou EOF en cas de de fin de ficheir ou de problème. donc il faut tester soit EOF soit != nombre_truc_a_lire

n°310846
spydurmen
Posté le 16-02-2003 à 19:26:46  profilanswer
 

Ptin je savais meme pa ke puts marhcahit en C
je croyais ke ct ke le C++

n°310848
Taz
bisounours-codeur
Posté le 16-02-2003 à 19:27:25  profilanswer
 

Spydurmen a écrit :

Ptin je savais meme pa ke puts marhcahit en C
je croyais ke ct ke le C++

puts c'est pas du C++. ni les char*

n°310849
spydurmen
Posté le 16-02-2003 à 19:30:36  profilanswer
 

En gros mon erreur ct de croire ke en faisant char* je déclarait un tableau de char de la même facon ke si j'avais fait char [8]  c ca?

n°310852
Taz
bisounours-codeur
Posté le 16-02-2003 à 19:34:23  profilanswer
 

toi t'as besoin de prendre un cours de pointeurs

n°310853
spydurmen
Posté le 16-02-2003 à 19:45:44  profilanswer
 

nan en fait g compri pour les pojnteurs t'inkietes
en revnahce comment faire pour ne pas détecter les blancs c koi?

n°310855
Taz
bisounours-codeur
Posté le 16-02-2003 à 19:47:59  profilanswer
 

non je crois que t'as pas compris les pointeurs sinon tu ferais la différence entre un tableau et pointeur.
 
c'est quoi ton problème avec les blancs?


Message édité par Taz le 16-02-2003 à 19:58:52
n°310856
spydurmen
Posté le 16-02-2003 à 19:59:40  profilanswer
 

char* c un pointeur sur caractère, on peut l'utiliser pour gérer une chaine de caractère en considérant ke ca pointe sur le premierr caractère d chaine
c pas alloué dans la mémoire
char [8] ca réserve de la place pour un tableau de caractère
(je c ce ke c un pinteur ;))
 
Sinon j'aimerais pouvoir sauter la lecture si ya un blance

n°310857
Taz
bisounours-codeur
Posté le 16-02-2003 à 20:05:15  profilanswer
 

un char * pointe vers une zone mémoire correctement allouée!
 
ben la ou tu veux sauter des blancs, je vois pas trop comment le faire avec scanf, à moins que tu aies systématiquement au moins un blanc... alros je cherche
 
en tout cas tu peux faire un

Code :
  1. int c;
  2. while((c=fgetc(fichier))!=EOF && isspace(c));
  3. if(c == EOF)
  4. {
  5.   // fin de fichier ou erreur
  6.   // fin de programme?
  7. }
  8. else
  9. {
  10.   // on remet le dernier caractere dans le flux
  11.   // sinon on perd la première lettre
  12.   ungetc(c, fichier);
  13. }

tout ça à mettre dans une fonction


Message édité par Taz le 16-02-2003 à 20:16:06

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème de lecture formatée dans un fichier

 

Sujets relatifs
lire fiicher txt et affecter le nombre kil y a dedans --> problème ..Problème GCC : pas d'éxécutable, ni d'erreur en fin de compilation
Gros probleme de feuille de style avec Netscape 4 (Linux)[Java]Problème de compilation avec Jext et java en ligne de commande
Piti problème[java] probleme de serialisation
[HTML] Probleme tableau + images pour faire un cadreIIS, fichier manquant sur mon cd win XP
[C] Probleme de #define...probleme d'addition(noob);
Plus de sujets relatifs à : Problème de lecture formatée dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR