[C] Lire un fichier texte

Lire un fichier texte [C] - C++ - Programmation

Marsh Posté le 26-04-2003 à 18:06:58    

Comment fait on pour lire un fichier texte et enregister ses donnés dans un tableau ?
Je sais lire les caracteres 1 par 1 ms je ne sais pas trop comment passer a la ligne.
Par exemple pour lire un tableau , j aimerais passer a la deuxieme ligne du tableau...
Si k1k1 pouvait m aider svp, je suis débutant..

Reply

Marsh Posté le 26-04-2003 à 18:06:58   

Reply

Marsh Posté le 26-04-2003 à 18:08:30    

:heink:

Reply

Marsh Posté le 26-04-2003 à 18:16:30    

tu preferes pas stocker ca dans des char* ?

Reply

Marsh Posté le 27-04-2003 à 00:24:16    

je connais pas vraiment les char*...
 
mon fichier texte ressemble a ca :  
Départ  Arrivée  
X Y X Y
0 7 0 8
1 9,26 1 9
3 10 4 10
3 9 5,67 9
3,21 7 6 7
0,36 6 5 5,02
3 3 1 3
3 2 0 2
3 0 0 0
3 0 6 0
 
Et il faut que mon programme puisse lire les coordonnées x et y.
Voila.

Reply

Marsh Posté le 27-04-2003 à 01:23:19    


tu fait
 

Code :
  1. int x1,y,x2,z;
  2. fscanf(file,"%d %d %d %d",&x1,&y,&x2,&z);


 
bon fo encore que tu sache comment ouvrir un fichier  :D

Reply

Marsh Posté le 27-04-2003 à 03:30:18    

Surtout qu'il y a des valeurs du style 0,36  dans le tableau en question :o
 
remplace deja par double pour la declaration (sans oublier de les transformer en tableau de double en fait)
Pour lire le fichier => RTFM ou STFW  
Et pis pareil pour le fscanf.

Reply

Marsh Posté le 27-04-2003 à 10:35:57    

red faction>
il me semble que ca n arrive pas a passer le texte du debut du fichier :heink:  
 

Citation :


Départ  Arrivée  
X Y X Y

Reply

Marsh Posté le 27-04-2003 à 11:04:22    

red faction a écrit :


tu fait
 

Code :
  1. double x1,y,x2,z;
  2. fscanf(file,"%s %s\n);
  3. while(...)
  4. {
  5.     fscanf(file,"%g %g %g %g\n",&x1,&y,&x2,&z);
  6.     ...
  7. }


 
bon fo encore que tu sache comment ouvrir un fichier  :D  

Reply

Marsh Posté le 27-04-2003 à 11:21:06    

a quoi sert le premier fscanf ?  :??:

Reply

Marsh Posté le 27-04-2003 à 11:32:40    

eventuellement a passer les lignes de texte ???
 
mais il manque des arguments non ?
et c koi %s g jamais vu :??:

Reply

Marsh Posté le 27-04-2003 à 11:32:40   

Reply

Marsh Posté le 27-04-2003 à 12:10:09    

titan91 a écrit :

eventuellement a passer les lignes de texte ???
 
mais il manque des arguments non ?
et c koi %s g jamais vu :??:  


 
c pas standard, mais bon j'avais la flemme de faire du code propre [:zaib3k]  
 
le 1er sert a passer la 1ere ligne de texte.

Reply

Marsh Posté le 27-04-2003 à 12:13:24    

%s = string
 
c'est pour prendre un chaine de caractere, en fait le %s prend  
du debut jusqu'au prochain espace je crois... :hello:

Reply

Marsh Posté le 27-04-2003 à 12:13:59    

et t'as pas plus compliqué comme truc?
spourtant pas compliqué. soit on fait un fgets, soit des getchar jusqu'à un '\n', etc. Pas besoin de scanf

Reply

Marsh Posté le 27-04-2003 à 13:12:23    

Moi je pense pluto faire ca avec un fscanf().
Ms je comprend pas trop comment passer a la ligne...
c ca : "\n" qui me permet de passer a la ligne ??
Pke ca a pas l air de marcher :/

Reply

Marsh Posté le 27-04-2003 à 13:55:23    

oui \n permet de changer de ligne... :hello:
 
fais un watch pour voir si il scanne bien les 4 valeurs de ta ligne déjà... :wahoo:


Message édité par Tom18 le 27-04-2003 à 13:56:21
Reply

Marsh Posté le 27-04-2003 à 14:26:39    

attendez euh..
"un watch" c quoi ca  :??:

Reply

Marsh Posté le 27-04-2003 à 14:29:53    

pour les vleurs c bon ca les scan bien
mais fo passer les ligens de texte c le seul pb...

Reply

Marsh Posté le 27-04-2003 à 14:38:09    

Merci a tous  :jap:

Reply

Marsh Posté le 27-04-2003 à 14:41:23    

ToxicAvenger a écrit :

tu preferes pas stocker ca dans des char* ?


 :heink:  
Quelle différence avec un tableau

Reply

Marsh Posté le 27-04-2003 à 15:00:18    

Tom18 a écrit :

%s = string
 
c'est pour prendre un chaine de caractere, en fait le %s prend  
du debut jusqu'au prochain espace je crois... :hello:  


 
Moi g l impression qu il a du mal avec les %s pke qd j execute le truc il me fait une erreur et ma fenetre dos bhe pof elle disaprait..

Reply

Marsh Posté le 27-04-2003 à 15:12:58    

Ace17 a écrit :


 :heink:  
Quelle différence avec un tableau


 
autant qu'entre le jour et la nuit.  :pfff:

Reply

Marsh Posté le 27-04-2003 à 15:17:46    

Vas y, explique moi la différence qu'il y a entre un char* et un tableau. ( je pense qu'on a mal du se comprendre )
Il me semble qu'un char* n'est autre qu'un pointeur vers un char (ou un tableau de char dans ce cas précis)


Message édité par Ace17 le 27-04-2003 à 15:21:04
Reply

Marsh Posté le 27-04-2003 à 15:35:10    

Ace17 a écrit :

Vas y, explique moi la différence qu'il y a entre un char* et un tableau. ( je pense qu'on a mal du se comprendre )
Il me semble qu'un char* n'est autre qu'un pointeur vers un char (ou un tableau de char dans ce cas précis)


 
ton tableau a une taille fixe (a part en C99 je crois).
un char* est virtuellement infinie (a coup de malloc/realloc).

Reply

Marsh Posté le 27-04-2003 à 16:25:05    

ToxicAvenger a écrit :


ton tableau a une taille fixe (a part en C99 je crois).
un char* est virtuellement infinie (a coup de malloc/realloc).


 
Oui mais tu peux tout à fait adresser un tableau à taille fixe avec un char*... en fait tu compares deux trucs pas comparables. Un tableau est une zone de mémoire; un char* c'est juste un type de données, qui sert très souvent à adresser un tableau.


Message édité par Ace17 le 27-04-2003 à 16:25:23
Reply

Marsh Posté le 27-04-2003 à 16:30:18    

Ace17 a écrit :


 
Oui mais tu peux tout à fait adresser un tableau à taille fixe avec un char*... en fait tu compares deux trucs pas comparables. Un tableau est une zone de mémoire; un char* c'est juste un type de données, qui sert très souvent à adresser un tableau.


 
le char* pointe sur le 1er octet d'une zone mémoire.
 
Et perso, je prefere utiliser des char*, c'est plus souple.

Reply

Marsh Posté le 27-04-2003 à 16:50:05    

ToxicAvenger a écrit :


 
le char* pointe sur le 1er octet d'une zone mémoire.
 
Et perso, je prefere utiliser des char*, c'est plus souple.


 
et perso, moi je met des int partout, par exemple :

Code :
  1. int str[2];
  2. strcpy((char*)&str, "riendtc" );


 
et j'attends vivement le 64 bits.


Message édité par Konar le 27-04-2003 à 16:50:26
Reply

Marsh Posté le 27-04-2003 à 17:06:00    

tabasc0 a écrit :


 
Moi g l impression qu il a du mal avec les %s pke qd j execute le truc il me fait une erreur et ma fenetre dos bhe pof elle disaprait..


 
le %s tu le stockais dans quoi ? un char* ?  :hello:
 
[edit] fautes d'orthographes... :whistle:


Message édité par Tom18 le 27-04-2003 à 17:06:33
Reply

Marsh Posté le 27-04-2003 à 20:37:53    

Konar a écrit :


 
et perso, moi je met des int partout, par exemple :

Code :
  1. int str[2];
  2. strcpy((char*)&str, "riendtc" );


 
et j'attends vivement le 64 bits.


 
de toutes facons, en C, un char est un int.

Reply

Marsh Posté le 27-04-2003 à 20:40:33    

ToxicAvenger a écrit :


 
de toutes facons, en C, un char est un int.


 :heink:


Message édité par charly007 le 27-04-2003 à 20:42:17
Reply

Marsh Posté le 27-04-2003 à 20:49:05    


 
ben vi... si tu sais pas ca, tu ne sais rien du C alors... :lol:


Message édité par ToxicAvenger le 27-04-2003 à 21:35:53
Reply

Marsh Posté le 27-04-2003 à 20:49:06    

oui, c'est le plus petit int
 
la norme veut  
 
sizeof(char)<=sizeof(short int)<=sizeof(int)<=sizeof(long int)<=sizeof(long long int)

Reply

Marsh Posté le 27-04-2003 à 20:50:18    

++Taz a écrit :

oui, c'est le plus petit int
 
la norme veut  
 
sizeof(char)<=sizeof(short int)<=sizeof(int)<=sizeof(long int)<=sizeof(long long int)


 
la norme veut également que sizeof(char) == 1

Reply

Marsh Posté le 27-04-2003 à 20:52:34    

ToxicAvenger a écrit :


 
ben vi... si tu sait pas ca, tu ne sait rien du C alors... :lol:  


Ca ne me surprendrait pas.  :D  
 
Enfin moi je pensais que char était sur 8 bits, et int sur 16 ou 32 (dépendant des platformes), mais bon...


Message édité par charly007 le 27-04-2003 à 20:53:38
Reply

Marsh Posté le 27-04-2003 à 21:06:07    

et un char compte exactement CHAR_BIT bits
 
voir votre <limits.h> pour plus de precisions

Reply

Marsh Posté le 30-04-2003 à 19:41:36    

j ai un probleme avec le %s.
On m a dit qu il etait censé prendre toute une chaine de caractere mais qd je l utilise il ne prend qu un seul caractere seulement.

Code :
  1. fscanf(pf,"%c %c %c\n",&temp,&temp1,&temp2);
  2.  printf("%c %c %c",temp,temp1,temp2);


 
ca c mon code
et ca c mon texte que je fscanf :  
Depart  Arrivee  
X1 Y2 X1 Y2
0 7 0 8
1 9,26 1 9
3 10 4 10
3 9 5,67 9
3,21 7 6 7
0,36 6 5 5,02
3 3 1 3
3 2 0 2
3 0 0 0
3 0 6 0
 
 
et ds ma console il m ecrit : D e p
moi je voudrais plutot qu il m ecrive depart arrivee X1

Reply

Marsh Posté le 01-05-2003 à 02:26:51    

Tu as effectivement un probleme: celui d'ecrire %c a la place de %s
 
%c ne va te prendre qu'un seul et unique caractere, meme s'il s'agit d'une chaine.

Reply

Marsh Posté le 01-05-2003 à 03:12:06    

merde excuse moi je me suis trompé c bien des %s que g marqué.
Donc c pas ca le probleme.
Sur ce coup la g un pou fait le boulet  :pt1cable:

Reply

Marsh Posté le 01-05-2003 à 04:43:50    

Essayes avec fscanf ("%s%s\n%s%s%s%s\n", ...)
 
Je trouve ce code laid mais bon, puisqu'on est dans cette veine.
 
fscanf, c'est tres pratique pour recuperer des donnees bien formatees, comme les nombres que tu as ensuite.
Mais ce serait moi je virerais direct les 2 premieres lignes (comme on te l'as deja dit avec l'aide d'un fgets par exemple) et apres j'utiliserais le fscanf.


Message édité par Angel_Dooglas le 01-05-2003 à 04:44:13
Reply

Marsh Posté le 01-05-2003 à 04:44:35    

tabasc0 a écrit :

merde excuse moi je me suis trompé c bien des %s que g marqué.
Donc c pas ca le probleme.
Sur ce coup la g un pou fait le boulet  :pt1cable:  


 
poste tout ton code, y aura surement plein de trucs a revoir...

Reply

Marsh Posté le 01-05-2003 à 05:16:47    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed