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

  FORUM HardWare.fr
  Programmation
  C++

   comment se positionner au début d'un fichier ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment se positionner au début d'un fichier ?

n°278454
airseb
Posté le 02-01-2003 à 17:36:22  profilanswer
 

une fois qu'on est arrivé a la fin d'un fichier comment on fait pour se positionner au début ?

mood
Publicité
Posté le 02-01-2003 à 17:36:22  profilanswer
 

n°278464
chrisbk
-
Posté le 02-01-2003 à 17:54:20  profilanswer
 

fseek(file,0,SEEK_SET);

n°278468
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 02-01-2003 à 17:58:15  profilanswer
 

et en C++
 
my_input_stream.seekg(0, ios::beg) qui est la meme chose que my_input_stream.seekg(0, ios_base::beg)


---------------
du bon usage de rand [C] / [C++]
n°278471
chrisbk
-
Posté le 02-01-2003 à 18:01:14  profilanswer
 

Taz@PPC a écrit :

et en C++
 
my_input_stream.seekg(0, ios::beg) qui est la meme chose que my_input_stream.seekg(0, ios_base::beg)


 
je ne dirais pas ce que l'on trouve dans mon code c++[:titprem]

n°278477
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 02-01-2003 à 18:04:56  profilanswer
 

des truc qui commence par f/F  :whistle:  :D


---------------
du bon usage de rand [C] / [C++]
n°278480
chrisbk
-
Posté le 02-01-2003 à 18:06:55  profilanswer
 

j'avoue [:ddr555]
 
(bon, a moitié en fait, vu que j'ai une tite couche par dessus)

n°278554
airseb
Posté le 02-01-2003 à 22:28:16  profilanswer
 

j'ai essayé fseek mais ça me met un message d'erreur !
voilà le code au cas où.
 
 

Code :
  1. #include <stdio.h>
  2.    #include <iostream.h>
  3.    #include <string.h>
  4.    #include <conio.h>
  5.    #define nb_vertices 200000
  6. #define nb_faces 200000
  7. float tab_vertices [nb_vertices][3] ;
  8. int tab_sommets [nb_faces][3] ;
  9.     void lecture ()
  10.     {
  11. char tmp [100] ;
  12. char tmp2 [100] ;
  13. int temp [nb_vertices] ;
  14. char chaine [100] ;
  15. char chaine2 [100] ;
  16.    strcpy (chaine , "*MESH_VERTEX" ) ; //affecte la chaine "*MESH_VERTEX" au tableau chaine
  17. strcpy (chaine2 , "*MESH_FACE" ) ;
  18. //char passe_ligne [200] ;
  19. int i=0 ;
  20.    int k=0;
  21. char nom_fichier[] = "cool.ase" ;
  22. FILE *cool ;    //pointeur sur le fichier cool
  23. if ((cool = fopen(nom_fichier, "r" )) == NULL)
  24.          return ;
  25. do
  26. {
  27.  do
  28.   {
  29.   fscanf(cool, "%s", tmp) ;
  30.   }
  31.   while (strcmp (chaine, tmp) != 0) ; //passe toutes les chaines en revue qu'a ce que tmp soit égal à chaine ("*MESH_VERTEX" )
  32.   do//rempli le tableau avec des coordonnées de vertices
  33.  {
  34.   fscanf (cool, "%d%f%f%f%s", &(temp[0]) , &(tab_vertices[i][0]), &(tab_vertices[i][1]),
  35.          &(tab_vertices[i][2]), tmp) ;
  36.   //cout << tab_vertices[i][0]<<" "<< tab_vertices[i][1]<<" "<< tab_vertices[i][2]<<endl ;
  37.          i=i+1 ;
  38.  }
  39.  while (strcmp (tmp, "}" )!=0) ;
  40. }
  41.    while (!feof(cool)) ;
  42.         fseek (cool, 0, SEEK_SET) ;
  43. do
  44. {
  45.  do //rempli le tableau avec le numero des sommets
  46.  {
  47.   do
  48.    {
  49.    fscanf(cool, "%s", tmp2) ;
  50.   }
  51.    while (strcmp (chaine2, tmp2) != 0) ;
  52.   //fgets (passe_ligne, 200, cool) ; //saute une ligne dans le fichier où les données ne servent pas
  53.   fscanf (cool, "%s %s    %d %s    %d %s   %d %s    %d %s    %d %s    %d  %s %d  %s %d",
  54.           tmp, tmp, &tab_sommets [k][0],tmp,&tab_sommets [k][1],tmp, &tab_sommets [k][2], tmp,
  55.    &temp[0],tmp, &temp[0],tmp, &temp[0],tmp, &temp[0],tmp, &temp[0]) ;
  56.   cout << tab_sommets [k][0]<<" "<<tab_sommets [k][1]<<" "<<tab_sommets [k][2] << endl ;
  57.          k=k+1  ;
  58.  }
  59.       while (strcmp (tmp2, "}" )!=0);
  60. }
  61. while (!feof(cool)) ;
  62.    
  63.      fclose (cool) ;
  64.    }
  65.    void main ()
  66.    {
  67.     lecture () ;
  68.   getch ();
  69.    }


Message édité par airseb le 03-01-2003 à 14:52:57
n°278557
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 02-01-2003 à 22:43:11  profilanswer
 

on va dire que j'ai rien vu...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
quoi comme message d'erreur? à la compilation?


---------------
du bon usage de rand [C] / [C++]
n°278565
airseb
Posté le 02-01-2003 à 23:07:38  profilanswer
 

ça compile mais j'ai un "debug error" au moment où la fenetre doit s'afficher.
 

n°278576
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 02-01-2003 à 23:27:20  profilanswer
 

airseb a écrit :

ça compile mais j'ai un "debug error" au moment où la fenetre doit s'afficher.
 
 

euh tu me provoques la ou quoi :D ?


---------------
du bon usage de rand [C] / [C++]
mood
Publicité
Posté le 02-01-2003 à 23:27:20  profilanswer
 

n°278582
chrisbk
-
Posté le 02-01-2003 à 23:29:53  profilanswer
 

airseb a écrit :

ça compile mais j'ai un "debug error" au moment où la fenetre doit s'afficher.
 
 


 
bordel, c'est vraiment TROP te demander de POSTER ce ***** DE MESSAGE D'ERREUR ?  

n°278592
airseb
Posté le 02-01-2003 à 23:36:06  profilanswer
 

c un efenetre qui apparait avec marque dessus :
"debug error
 
chemin du fichier
 
runtime error"
 
avec les boutons abandonner, recommencer, ignorer.
 
c tout !

n°278593
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 02-01-2003 à 23:41:24  profilanswer
 

airseb a écrit :

c un efenetre qui apparait avec marque dessus :
"debug error
 
chemin du fichier
 
runtime error"
 
avec les boutons abandonner, recommencer, ignorer.
 
c tout !

mince alors  :pfff:


---------------
du bon usage de rand [C] / [C++]
n°278685
Acidman
no comment
Posté le 03-01-2003 à 11:29:27  profilanswer
 

Un petit conseil
Je serai toi j'initialiserai tous mes tableau avec Memset dés le debut.
c preferable et ca evite des soucis parfois.

n°278700
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 03-01-2003 à 12:13:53  profilanswer
 

acidman a écrit :

Un petit conseil
Je serai toi j'initialiserai tous mes tableau avec Memset dés le debut.
c preferable et ca evite des soucis parfois.

:pfff: toi tu sors
 
 
c'est vrai que tu ferais peut etre mieux d'utiliser des std::vector et des std::string et profiter de leur constructeur qui forunissent une initiliasitation par défaut
 
mais t'en va surtout pas faire du malloc/memset. si tu utilises malloc (c'est a dire que tu dissocies allocation et construction), jete un oeil à uninitialized_fill/copy, etc.


---------------
du bon usage de rand [C] / [C++]
n°278716
Acidman
no comment
Posté le 03-01-2003 à 13:14:33  profilanswer
 

Taz@PPC a écrit :

:pfff: toi tu sors
 
 
c'est vrai que tu ferais peut etre mieux d'utiliser des std::vector et des std::string et profiter de leur constructeur qui forunissent une initiliasitation par défaut
 
mais t'en va surtout pas faire du malloc/memset. si tu utilises malloc (c'est a dire que tu dissocies allocation et construction), jete un oeil à uninitialized_fill/copy, etc.


 
Faut pas s'enerver comme ca  
c'est un conseil car il faut prendre l'habitude d'initialisez les tableau c tout
Maintenant explique moi en quoi le memset n'est pas bon a utilisé?

n°278724
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 03-01-2003 à 13:28:55  profilanswer
 

parce que c'est du C pardi
 
en C++ on initialise pas, on construit. les constructeurs par déaut des types de bases sont triviaux et on peut éventuellement obtenir le meme résultat avec qu'avec une construction/affectation.
 
les fonctions meme* sont certes tres utilses en C mais ne servent à rien en C++. Bref, utilisez les std::vector qui construit proprement chaque élément de la séquence.
 
le code de airseb est du pur C: c'est bien simple chez moi, ça compile en C (sauf le iostream.h qui est inutile dans tous les cas) mais pas en C++.
 
d'ailleurs pourquoi je parle de C++
 
vas pour le memset alors, mais seulement sur des tableaux d'entier (pas de char (0 par imprimble), pas de flottant (0 est une représentation invalide qui peut déclencher des SIGFPE)
donc moi je n'utilise memset que pour intialiser des entiers et nettoyer proprement des zones avant des les exploiter


---------------
du bon usage de rand [C] / [C++]
n°278787
airseb
Posté le 03-01-2003 à 14:59:03  profilanswer
 

j'ai fais un petit test :
quand j'enleve les commentaires devant le 1er cout, la partie avant le fseek s'execute,mais pas la seconde comme si le fseek n'avait aucun effet
Et quand je met en commentaire toute la première partie avant le fseek( du "do" jusqu'au "while(!feof)" la 2ème marche parfaitement.
ce qui veut dire que le probleme est au nivo du fseek qui semble ne pas faire son effet, pouvez vous me dire pourquoi ?

n°278931
LeGreg
Posté le 03-01-2003 à 21:38:41  profilanswer
 

Citation :

vas pour le memset alors, mais seulement sur des tableaux d'entier (pas de char (0 par imprimble), pas de flottant (0 est une représentation invalide qui peut déclencher des SIGFPE)
donc moi je n'utilise memset que pour intialiser des entiers et nettoyer proprement des zones avant des les exploiter


 
l'equivalent en C++
c'est std::fill
 
Par contre il existe des methodes rapides de copies
de blocs ou de remplissages de blocs avec MMX
qui ne peuvent pas etre compatibles avec les specifications du C++.
Tout depend de tes priorites.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°279047
Musaran
Cerveaulté
Posté le 04-01-2003 à 04:28:26  profilanswer
 

Il me semble que fseek ne remet pas à 0 les indicateur d'erreur et eof: echec pour toute lecture/feof ultérieurs.
 
Essaie:

Code :
  1. rewind(cool);


 
 

acidman a écrit :

c'est un conseil car il faut prendre l'habitude d'initialisez les tableau c tout

Je suis contre.
J'initialise que si j'en ai explicitement besoin.
En effet, le compilateur considère comme normal l'accès à une valeur initialisée, donc on perd une alerte potentielle.
 
Pour les initialisations nécessaires j'utilises '={};' (pour les tableaux vrais), comme ça le compilateur comprends.
Pour les initialisations de déboguage (repérer à coup sûr des valeurs bidon 'non-initialisées';), j'utilises des macros debug-only.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°279117
weed
Posté le 04-01-2003 à 12:37:57  profilanswer
 

koi comme macros debug que tu utilise le plus svt
cite moi juste 2-3  pour que je m'y mette un peu qd meme

n°279500
Musaran
Cerveaulté
Posté le 05-01-2003 à 06:32:13  profilanswer
 

Dans ce genre:

Code :
  1. //remplir tout objet (variable/structure/tableau) d'octets val
  2. #define BYTEFILL(obj,val) do{ memset(&(obj),val,sizeof(obj)); } while(0)
  3. //remplir tout objet d'octets à 0 (ce qui n'est pas forcément valeur 0)
  4. #ifdef NDEBUG
  5. #define DBGZERO(a) do{} while(0)
  6. #else
  7. #define DBGZERO(a) BYTEFILL(a,0)
  8. #endif
  9. //remplir tout objet d'octets à une valeur bogus magique
  10. #ifdef NDEBUG
  11. #define DBGBOGUS(a) do{} while(0)
  12. #else
  13. #define DBGBOGUS(a) BYTEFILL(a,0xCC)
  14. #endif
  15. //free() un pointeur et lui donne une valeur bogus pour éviter le réemploi
  16. #ifdef NDEBUG
  17. #define FREEZAP(p) do{ free(p)                 ; } while(0)
  18. #else
  19. #define FREEZAP(p) do{ free(p); p= 0x0xDeadC0de; } while(0)
  20. #endif

Je ne suis pas satisfait des noms. J'en cherche qui soient courts, explictes et cohérents.
 
'do{...} while(0)' est une astuce pour:
1) Obliger à placer un ';' après, comme pour une instruction.
2) Garantir que ce ';' est mangé et ne vas pas briser un if/else.
 
En C++ c'est un peu différent.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°279510
Taz
bisounours-codeur
Posté le 05-01-2003 à 10:35:44  profilanswer
 

je croyais que t'avais dit que t'arreter les macros pour 2003  :whistle:

n°279640
Taz
bisounours-codeur
Posté le 05-01-2003 à 16:09:19  profilanswer
 

bon, puisque finalement vous voulez faire du C, je vous donne la solution.
 
Lorsque EOF est détecté, le flag d'erreur du flux est mis a jour. toute opération sur le flux est donc rendu impossible. la solution?  raz le flag
 
void clearerr(FILE * stream);
 
et apres
 
void rewind(FILE * stream);
(qui est equivalent à fseek(stream, OL, SEEK_SET))
 
tout ça bien évidemment dans <stdio.h>

mood
Publicité
Posté le   profilanswer
 


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

   comment se positionner au début d'un fichier ?

 

Sujets relatifs
Ouverture d'un fichier sur une machine distante en réseau local[PHP] Création du fichier
j'ai un probleme bizarre avec mon programme qui lit dans un fichier[PHP] Afficher le nombre de fichier d'un dossier
[PHP] - Commande pr connaitre le chemin d'un fichier[PHP] Apache ne peux pas inclure n'importe quel fichier
[ resolu ] JTree, est ce qu'on pe représenter un système de fichier ??Obetnir le poids (en Ko) d'un fichier en php ?
(lire dans un fichier ascii) pourquoi mon programme ne marche pas ?[Win32] Wininet : savoir si un fichier existe ?
Plus de sujets relatifs à : comment se positionner au début d'un fichier ?


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