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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

[C] Lire un fichier texte

n°379203
Konar
Posté le 01-05-2003 à 05:16:47  profilanswer
 

Reprise du message précédent :
bravo pour ton fichier texte a la con, j'ai bien perdu 30 min a m'apercevoir que c'etait la faute aux caracteres ',' alors que pour le scanf pour lire des float c'est mieux d'avoir le caractere '.' entre les décimaux (personne s'en est rendu compte aussi...)
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4. char str[32];
  5. float x1, y1, x2, y2;
  6. FILE *f;
  7. f = fopen("c:\\rien.txt", "r" );
  8. if (!f)
  9.  return 1;
  10. fscanf(f, "%s%s\n%s%s%s%s\n", str, str, str, str, str, str);
  11. while (fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2) != -1)
  12.  ;//printf("\nOut : %f %f %f %f", x1, y1, x2, y2);
  13. fclose(f);
  14. return 1;
  15. }


 
voila, je peux aller me pieuter content d'avoir fait du c-unix.

mood
Publicité
Posté le 01-05-2003 à 05:16:47  profilanswer
 

n°380317
tabasc0
Posté le 02-05-2003 à 12:33:11  profilanswer
 

Merci konar :)

n°380338
tabasc0
Posté le 02-05-2003 à 13:27:35  profilanswer
 

En fait je n ai pas tous compris a ta fonction.
Du style la condition while

Code :
  1. (fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2) != -1)


je ne comprend pas tres bien...
G légerement modifié la source pour qu il m affiche toute les valeurs une par une et ca donne ca :

Code :
  1. #include <stdio.h>
  2.   int main()
  3.   {
  4.      char str[32];
  5.      float x1, y1, x2, y2;
  6.      FILE *f;
  7.      
  8.      f = fopen("f:\\Documents and Settings\\Charly\\Bureau\\test.txt", "r" );
  9.      if (!f)
  10.         return 1;
  11.      fscanf(f, "%s%s\n%s%s%s%s\n", str, str, str, str, str, str);
  12.      while (fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2) != -1)
  13.  {
  14.   fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2);
  15.   printf("\nOut : %f %f %f %f", x1, y1, x2, y2);
  16.  }
  17.      fclose(f);
  18.      return 1;
  19.   }


Seulement il m affiche une ligne sur 2, il commence a partir de la deuxieme et il affiche qu une sur 2 alors je comprend pas trop :/

n°380341
ToxicAveng​er
Posté le 02-05-2003 à 13:29:21  profilanswer
 

tabasc0 a écrit :

En fait je n ai pas tous compris a ta fonction.
Du style la condition while

Code :
  1. (fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2) != -1)


je ne comprend pas tres bien...
G légerement modifié la source pour qu il m affiche toute les valeurs une par une et ca donne ca :

Code :
  1. #include <stdio.h>
  2.   int main()
  3.   {
  4.      char str[32];
  5.      float x1, y1, x2, y2;
  6.      FILE *f;
  7.      
  8.      f = fopen("f:\\Documents and Settings\\Charly\\Bureau\\test.txt", "r" );
  9.      if (!f)
  10.         return 1;
  11.      fscanf(f, "%s%s\n%s%s%s%s\n", str, str, str, str, str, str);
  12.      while (fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2) != -1)
  13.  {
  14.  // fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2);
  15.   printf("\nOut : %f %f %f %f", x1, y1, x2, y2);
  16.  }
  17.      fclose(f);
  18.      return 1;
  19.   }


Seulement il m affiche une ligne sur 2, il commence a partir de la deuxieme et il affiche qu une sur 2 alors je comprend pas trop :/


 
marchera mieux avec ca [:zebra33]

n°380345
tabasc0
Posté le 02-05-2003 à 13:31:39  profilanswer
 

WAOUUUUUUUUU rapide la reponse :)
J adore ce forum..
il se passait en quoi en fait ds ma fonction ?
Il scannait 2 fois les trucs ???
J m bien qd ca marche ms j m bien savoir pkoi ca marche pas aussi :)

n°380369
ToxicAveng​er
Posté le 02-05-2003 à 14:05:34  profilanswer
 

tabasc0 a écrit :

WAOUUUUUUUUU rapide la reponse :)
J adore ce forum..
il se passait en quoi en fait ds ma fonction ?
Il scannait 2 fois les trucs ???
J m bien qd ca marche ms j m bien savoir pkoi ca marche pas aussi :)


 
 
oui.
 
En C, tu peux mettre du code n'importe où, meme dans un while.
En l'occurence, ton while contenait un fscanf qui lisait une ligne.
 
Donc tu te retrouvais a lire 2 ligns d'un coup (un dans ton while et un dans la boucle du while) et a n'en afficher qu'une.

n°381056
tabasc0
Posté le 03-05-2003 à 00:48:31  profilanswer
 

Comme certains l ont remarqués, dans mon fichier texte de départ il y a des virgules et ca fout la merde.
Je cherche a remplacer les virgules par des points pour ensuite saisir les coordonnés de mon fichier.
Je sais remplacer une vigule par un point avec une fonction toute bête ms elle est pas compatible avec le reste de mon programme.
Si quelqu un a une idée je l en remercie par avance  :jap:

n°381129
TiTan91
Posté le 03-05-2003 à 10:40:54  profilanswer
 

tu stocke tous les caracteres de ton fichier dans un tableau de char (avec malloc)
tu remplace les virgules par des points
tu sauve le tout avec fputc

n°381181
tabasc0
Posté le 03-05-2003 à 13:32:36  profilanswer
 

Je comprend pas tres bien :/
voici mon code

Code :
  1. #include <stdio.h>
  2.   int main()
  3.   {
  4.      char str[32];
  5.      int *car,i;
  6.  float x1, y1, x2, y2;
  7.  FILE *f;
  8.  car=(int*)malloc(100*sizeof(int));
  9.       f = fopen("f:\\Documents and Settings\\Charly\\Bureau\\test.txt", "r" );
  10.      if (!f)
  11.         return 1;
  12.  if(car==NULL)
  13.  {return 1;}
  14.  else
  15.  {
  16.   for(i=0;i<100;i++)
  17.   {
  18.    fscanf(f, "%c", &car[i]);
  19.    if(car==',')
  20.    {
  21.     car='.';
  22.    }
  23.    fputc(car[i],f);
  24.   }
  25.   fscanf(f, "%s%s\n%s%s%s%s\n", str, str, str, str, str, str);
  26.   while (fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2) != -1)
  27.  {
  28.   printf("\nOut : %f %f %f %f", x1, y1, x2, y2);
  29.  }
  30.  }
  31.      fclose(f);
  32.      return 1;
  33.   }


mais g l impression qu une fois qu il a tous scanné la premiere fois caractere par caractere et bien qd je scan une seconde fois par chaine il est arrivé a la fin du fichier non ?
Bon j ai peur d en effreyer certains ms je suis un debutant  :(

n°381182
polo021
Posté le 03-05-2003 à 13:35:24  profilanswer
 

si tu lis le fichier une premiere fois jusqu'a la fin , et que tu le relis ensuite, tu seras deja a la fin, donc il ne lira rien
 
Le truc le plus simple est de fermer et de réouvrir le fichier comme ca tu relis depuis le debut.
Sinon tu as la fonction rewind.

mood
Publicité
Posté le 03-05-2003 à 13:35:24  profilanswer
 

n°381366
tabasc0
Posté le 03-05-2003 à 19:52:18  profilanswer
 

bon bhe ca marche toujours pas, il fait commme si il n avait pas remplacé les "," par des ".".
Je sais pas tres bien si j utilise bien la fonction fputc().
Est est ce que quelqu un peut m aider :/ ?

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.   int main()
  5.   {
  6.      char str[32], *car;//,car[150];
  7.      int i;
  8.  float x1, y1, x2, y2;
  9.  FILE *f;
  10.  car=(char*) malloc(150*sizeof(char));
  11.       f = fopen("f:\\Documents and Settings\\Charly\\Bureau\\test.txt", "r" );
  12.      if (!f)
  13.         return 1;
  14.  if(car==NULL)
  15.  {return 1;}
  16.  else
  17.  {
  18.   for(i=0;i<150;i++)
  19.   {
  20.    fscanf(f, "%c", &car[i]);
  21.    if(car[i]==',')
  22.    {
  23.     car[i]='.';
  24.    }
  25.    printf("%c",car[i]);
  26.    fputc(car[i],f);
  27.    fclose(f);
  28.   }
  29.   f = fopen("f:\\Documents and Settings\\Charly\\Bureau\\test.txt", "r" );
  30.      if (!f)
  31.         return 1;
  32.   fscanf(f, "%s%s\n%s%s%s%s\n", str, str, str, str, str, str);
  33.   while (fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2) != -1)
  34.  {
  35.   printf("\nOut : %f %f %f %f", x1, y1, x2, y2);
  36.  }
  37.  }
  38.      fclose(f);
  39.      return 1;
  40.   }

n°381378
tabasc0
Posté le 03-05-2003 à 20:56:25  profilanswer
 

:bounce:  :(

n°381444
TiTan91
Posté le 03-05-2003 à 23:36:10  profilanswer
 

euh la tu puvre ton fichier en LECTURE
tu copie donc les caracteres dans un tableau et remplace les virgules par des points
ca c est bien fait
 
mais ensuite tu dois fermer le fichier
le reouvrir en ECRITURE
et refaire une boucle avec le fputc

n°381454
Taz
bisounours-codeur
Posté le 03-05-2003 à 23:46:44  profilanswer
 

moi je comrpends rien  à ton truc compliqué...
 
tu veux pas faire un
 

Code :
  1. FILE* OUT, IN;
  2. /* ... */
  3. int c;
  4. while((c=fgetc(IN))!=EOF)
  5. {
  6.   if(c==',')
  7.   {
  8.      c='.';
  9.   }
  10.   fputc(c, OUT);
  11. }


 
edit: statisfaits? vous les avez vos ';'? vous savez enfin ce que sont IN et OUT (ce que vous n'auriez pas pu deviné évidemment)? [:samduloft] :)


Message édité par Taz le 04-05-2003 à 08:40:19
n°381517
tabasc0
Posté le 04-05-2003 à 01:40:00  profilanswer
 

mais c quoi IN et OUT :/ ?
et il manque pas d ";" ?


Message édité par tabasc0 le 04-05-2003 à 01:40:23
n°381561
Tetedeienc​h
Head Of God
Posté le 04-05-2003 à 08:15:38  profilanswer
 

tabasc0, plusieurs trucs que tu as pas l'air d'avoir compris :
 
-un While se met avec une condition dedans. Cependant, en C, une condition, ca peut etre n'importe quoi. en C, 0 c'est faux. Tout le reste est vrai.
Donc quand tu fous une instruction dans un while, il va l'executer entierement, et comparer la valeur retournee avec 0. Si c'est le cas, on sort, sinon, on continue, et comme le corps du while c'est "rien faire" ( ; ) , ben, on reevalue la condition...
 
Dans son cas, la condition faisait tout le boulot.
 
Pour remplacer les , par des points, suit le code de TAZ, il est parfait ( y a des typos effectivement, mais t'es pas de meure, tu peux rajouter des ; pour que ca marche, nan ? Effectivement son code passe pas mon gcc.

n°381615
TiTan91
Posté le 04-05-2003 à 12:32:28  profilanswer
 

tabasc0 a écrit :


Code :
  1. fscanf(f, "%f %f %f %f\n", &x1, &y1, &x2, &y2);
  2. printf("\nOut : %f %f %f %f", x1, y1, x2, y2);




 
j ai a peu pres la meme chose (avec des lf) mais ca marche pas...
j essaye de lire la 2e ligne de mon fichier texte qui est comme ca :
10 10 10 10 (c est des tabulations entre les nombres)
la ligne suivante est  
X Y X Y
et ca m affiche ca :
10.000002 0.000000 0.000000 -9255961663581730200000000
 
je comprend pas...

n°381617
Taz
bisounours-codeur
Posté le 04-05-2003 à 12:35:52  profilanswer
 

1) toujours regarder le retour de fscanf
2) tu peux donner le bout de code concerné? surtout la lecture de la première ligne
3) ça te sert vraiment de lire le \n? tu es sur de maitriser ce comportment?


Message édité par Taz le 04-05-2003 à 12:44:17
n°381627
ToxicAveng​er
Posté le 04-05-2003 à 12:58:48  profilanswer
 

++Taz a écrit :

1) toujours regarder le retour de fscanf
2) tu peux donner le bout de code concerné? surtout la lecture de la première ligne
3) ça te sert vraiment de lire le \n? tu es sur de maitriser ce comportment?


 
sans maitrouise, la pouissance n'est rien !

n°381633
TiTan91
Posté le 04-05-2003 à 13:05:10  profilanswer
 

en fait j ai pas le \n
et le scanf retourne la valeur 4
 

Code :
  1. do
  2.  {
  3.   temp=fgetc(entree);
  4.  }while(temp!='\n');
  5. fscanf(entree,"%lf %lf %lf %lf", &a1, &a2, &b1, &b2);
  6. printf ("%lf %lf %lf %lf\n\n",a1,a2,b1,b2);


Message édité par TiTan91 le 04-05-2003 à 13:05:26
n°381636
TiTan91
Posté le 04-05-2003 à 13:06:37  profilanswer
 

enfin je suppose ke je peux modifier mon do while en virant la variable temp...

n°381639
Taz
bisounours-codeur
Posté le 04-05-2003 à 13:10:48  profilanswer
 

pour lire un double %lf
pour afficher un double %f

n°381648
TiTan91
Posté le 04-05-2003 à 13:19:08  profilanswer
 

bah ca change rien...

n°381650
Taz
bisounours-codeur
Posté le 04-05-2003 à 13:21:01  profilanswer
 

tant que tu donnes pas le code compelt on peut rien faire pour toi
 
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.   float a, b, c, d;
  5.   int code;
  6.   code=scanf("%f %f %f %f", &a, &b, &c, &d);
  7.   printf("code=%d %f %f %f %f\n", code, a, b, c, d);
  8.   code=scanf("%f %f %f %f", &a, &b, &c, &d);
  9.   printf("code=%d %f %f %f %f\n", code, a, b, c, d);
  10.   return 0;
  11. }

fonctionne tres bien chez moi

n°381654
TiTan91
Posté le 04-05-2003 à 13:24:43  profilanswer
 

Code :
  1. #include <stdio.h>
  2. int nbpts(long *nb_pts_depart,long *nb_pts_arrivee)
  3. {
  4. FILE *entree;
  5. long temp, a1, a2, b1 ,b2;
  6. int ret=-1;
  7. entree=fopen("entree.txt","r" );
  8. if(entree != 0)
  9. {
  10.  do        // permet de depasser la premiere ligne du fichier
  11.  {
  12.   temp=fgetc(entree);
  13.  }while(temp!='\n');
  14.  fscanf(entree,"%lf %lf %lf %lf", &a1, &a2, &b1, &b2);
  15.  if(a1 == a2 && b1 == b2)
  16.  {
  17.   *nb_pts_depart = a1;
  18.   *nb_pts_arrivee= b1;
  19.   ret=0;
  20.  }
  21.  else
  22.  {
  23.   printf ("ERREUR dans la saisie des coordonnees des points\n\n" );
  24.   printf ("%f %f %f %f\n\n",a1,a2,b1,b2);
  25.  }
  26.  fclose(entree);
  27. }
  28. return ret;
  29. }


 

Code :
  1. void main()
  2. {
  3. int ret=0;
  4. long *nb_pts_depart;
  5. long *nb_pts_arrivee;
  6. nb_pts_depart = -1;
  7. nb_pts_arrivee= -1;
  8. ...
  9. ret = nbpts(nb_pts_depart, nb_pts_arrivee);
  10. ...

n°381733
Taz
bisounours-codeur
Posté le 04-05-2003 à 15:23:24  profilanswer
 

t'en à d'autres des comme ça? tu pourrais pas lire les merssages de ton compilo des fois?
 
long  
 
 :fou:  
 
j'ai vraiment pitié de toi
 
 
et manque aussi les allocations de tous tes pointeurs.
 
bref ton problème est tout sauf un problème de fichier


Message édité par Taz le 04-05-2003 à 15:24:07
n°381773
TiTan91
Posté le 04-05-2003 à 16:12:49  profilanswer
 

bah j y connais pas grand chose en pointeurs moi
j essaye d apprendre
 
et ce ke tu me dis ne m avance a rien :(

n°381775
Taz
bisounours-codeur
Posté le 04-05-2003 à 16:14:26  profilanswer
 

t'as qu'a faire
 
long res1, long res2
 
fta_fonction(&res1, &res2)
 
mais là fo t'acheter un bouquin de C

n°381785
TiTan91
Posté le 04-05-2003 à 16:33:22  profilanswer
 

donc je les definit en variables et j envoie l adresse memoire des variables...
et dans la fonction je laisse des pointeurs ?
 
enfiun de tte facon ca me sort tjs les meme valeurs...

n°381787
Taz
bisounours-codeur
Posté le 04-05-2003 à 16:34:42  profilanswer
 

oui tu fais comme ça,, tu gardes des pointeurs pour amnipuelr tes varaibles via leur adresse
 
 
t'as changé des idioties long / lf f

n°381792
TiTan91
Posté le 04-05-2003 à 16:41:18  profilanswer
 

vi j ai plus que des %f dans les printf
 
mais le truc ldes long * fo mette quoi a la place ?

n°381794
Taz
bisounours-codeur
Posté le 04-05-2003 à 16:43:03  profilanswer
 

t'es un boolay toi
 
long ca veut dire long
%f, %lf c'est des attributs pour float et double

n°381796
TiTan91
Posté le 04-05-2003 à 16:45:26  profilanswer
 

arffff
 
vi j avais pas fait gaffe du tt :D  :sarcastic:  
 
je sors

n°381798
Taz
bisounours-codeur
Posté le 04-05-2003 à 16:45:55  profilanswer
 

++Taz a écrit :

t'en à d'autres des comme ça? tu pourrais pas lire les merssages de ton compilo des fois?
 
long  
 
 :fou:  
 
j'ai vraiment pitié de toi


 
kwotaid

n°382052
ToxicAveng​er
Posté le 04-05-2003 à 22:39:20  profilanswer
 

++Taz a écrit :


 
kwotaid


 
kwassa ?  :??:

n°382380
theshockwa​ve
I work at a firm named Koslow
Posté le 05-05-2003 à 10:28:34  profilanswer
 

ToxicAvenger a écrit :


 
kwassa ?  :??:  


 
quoted ....


---------------
last.fm
n°382884
ToxicAveng​er
Posté le 05-05-2003 à 15:35:30  profilanswer
 


 
ouais non mais pourquoi ?

n°382994
theshockwa​ve
I work at a firm named Koslow
Posté le 05-05-2003 à 16:30:11  profilanswer
 

ToxicAvenger a écrit :


 
ouais non mais pourquoi ?


 
 
euuuuh ... PASKEEUU ! :D
 
Nan ... C'est parce qu'il l'a dit plus haut, donc il insiste sur le fait qu'il a déjà mis le doigt sur la faute sans obtenir l'effet escompté de la part du fautif ... :D


---------------
last.fm
n°386682
ToxicAveng​er
Posté le 07-05-2003 à 23:33:38  profilanswer
 

theShOcKwAvE a écrit :


 
 
euuuuh ... PASKEEUU ! :D
 
Nan ... C'est parce qu'il l'a dit plus haut, donc il insiste sur le fait qu'il a déjà mis le doigt sur la faute sans obtenir l'effet escompté de la part du fautif ... :D


 
rien compris  [:zaib3k]

n°386718
theshockwa​ve
I work at a firm named Koslow
Posté le 07-05-2003 à 23:55:42  profilanswer
 

ToxicAvenger a écrit :


 
rien compris  [:zaib3k]  


là, je crois que je peux plus rien faire ! :D


---------------
last.fm
n°386825
ToxicAveng​er
Posté le 08-05-2003 à 09:45:23  profilanswer
 

theShOcKwAvE a écrit :


là, je crois que je peux plus rien faire ! :D


 
 :sweat:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
Mauvais affichage du fichierLecture dans un fichier : ligne par ligne
lire un caractere de commande en Cfaire disparaitre les case en haut a droite d'un fichier Excel
Comment vérifier si un fichier excel est déja ouvert ou non (VBA)??Texte ecrit verticalement ??
Lire sur le contenu d'une socket pop3Ca s'ouvre avec quoi un fichier lib ?
Ouvrir un fichier en lecteur seuleRenomer des fichier en BAT
Plus de sujets relatifs à : [C] Lire un fichier texte


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