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

  FORUM HardWare.fr
  Programmation
  C++

  fstream et espaces

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fstream et espaces

n°585095
blackgodde​ss
vive le troll !
Posté le 07-12-2003 à 21:52:04  profilanswer
 

Bonjour,  
 
j'ouvre un fichier en utilisant fstream, et je voudrais pouvoir le lire caractère par caractère. le problème est que fstream enleve apparement les espaces de ce qu'il me renvoit. y a-t-il moyen d'eviter ca ?


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 07-12-2003 à 21:52:04  profilanswer
 

n°585102
schnapsman​n
Zaford Beeblefect
Posté le 07-12-2003 à 21:58:08  profilanswer
 

tu dois te planter qq part, ça m'étonnerai fort qu'un stream bouffe des octets sous prétexte qu'ils valent 0x20 [:gratgrat]


Message édité par schnapsmann le 07-12-2003 à 21:58:41

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°585105
Taz
bisounours-codeur
Posté le 07-12-2003 à 22:00:46  profilanswer
 

Code :
  1. std::ifstream ifs("fichier.txt" )
  2. char c;
  3. while(ifs.get(c))
  4. {
  5.   // fais ce que tu veux avec c
  6. }

n°585110
blackgodde​ss
vive le troll !
Posté le 07-12-2003 à 22:03:49  profilanswer
 

bin ... c bizarre ... j'ai du faire une erreur qq part : au bout d'un moment il me retourne n'importe quoi ...
 

Code :
  1. union Convert
  2. {
  3. unsigned long ul;
  4. char c[4];
  5. };
  6. class FileHeader
  7. {
  8. public:
  9. unsigned long sign;
  10. unsigned long nbDigits;
  11. friend istream & operator>>(istream & Flux, FileHeader & Hdr)
  12. {
  13.  Convert conv;
  14.  string s;
  15.  // on lit les 8 1ers caractères du flux
  16.  char c;
  17.  for(int i=0; i<8; i++)
  18.  {
  19.   Flux >> c;
  20.   s.push_back(c);
  21.  }
  22.  memcpy(conv.c, s.data(), 4);
  23.  Hdr.sign = conv.ul;
  24.  memcpy(conv.c, s.data()+4, 4);
  25.  Hdr.nbDigits = conv.ul;
  26.  return Flux;
  27. }
  28. };
  29. void CConfig::LoadFromFile(const string & FileName)
  30. {
  31. fstream f;
  32. f.open(FileName.c_str(), ios_base::in);
  33. if(!f.is_open()) throw exception("Impossible d'ouvrir le fichier." );
  34. FileHeader Hdr;
  35. f >> Hdr;
  36. // .....


 
pour cette 1ere lecture (f >> Hdr;) ca marche bien, mais apres j'en lis d'autre exactement sur le même principe et au bout d'un moment ca lit n'importe pas (pas le contenu du fichier en tout cas)


---------------
-( BlackGoddess )-
n°585121
Taz
bisounours-codeur
Posté le 07-12-2003 à 22:09:35  profilanswer
 

le >> n'a pas le meme sens, effectivement, il cherche un caractère qui n'est pas isspace
 
pas mal tes excepions mais n'utilise pas std::exception, dérive la tienne plutot
 
pour ton fichier, compacte le tout en
 
ifstream f(FileName.c_str());
 
et après test, peut être préférablement avec f.good()
 
l'union peut être de porter interne à la classe
 
évite les nombre magique (utilise plutot sizeof)
evite les friend, définit plutot
 
FH::print(ostream & )
 
et après en externe pas friend
 

Code :
  1. inline ostream & operator<<(ostream &, const FH & )
  2. {
  3.   f.print(os);
  4.   return os;
  5. }


 

n°585126
Taz
bisounours-codeur
Posté le 07-12-2003 à 22:16:32  profilanswer
 

et aufait, pourquoi ne pas utiliser les méthode read et write plutot que de faire des unions ?

n°585146
blackgodde​ss
vive le troll !
Posté le 07-12-2003 à 22:41:39  profilanswer
 

bien, merci pour ces conseils :)  
j'utilise un nombre magique car c'est une liste (à taille variable) que je dois lire
pour la place des unions, c'est parce que je les utilisais dans d'autres classes du même style
je vais me documenter sur les methodes read et write, que je ne connaissais pas :)  
pour les exceptions, ok :)
sinon, pourquoi eviter les friend ? pour une meilleure gestion des droits d'acces ?


Message édité par blackgoddess le 07-12-2003 à 22:42:02

---------------
-( BlackGoddess )-
n°585151
Taz
bisounours-codeur
Posté le 07-12-2003 à 22:46:59  profilanswer
 

ben comme je t'ai dit pour les friend. regarde vite du cote de read/write (E/S binaire, pas la peine de faire des acrobaties)

n°585166
blackgodde​ss
vive le troll !
Posté le 07-12-2003 à 22:58:02  profilanswer
 

ah, oui, read et write m'evite des complications, ca marche nickel, merci bcp :)


---------------
-( BlackGoddess )-

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

  fstream et espaces

 

Sujets relatifs
Rattacher un descripteur de fichier à un fstreamvirer les espaces apres une chaine ......
[ Javascript ] pb de soulignés a la place d'espaces dans une chaine..[c] Supprimezr ou creer des espaces ds une chaine de caracteres
Question conne en HTML : pkoi ca me fait des espaces entre les img?Supprimer des espaces en milieu de chaine
fstream et file mapping[PHP] Récupération d'un formulaires - pb avec espaces
passage d'une page à l'autre = coupe les parametres aux espaces???[PHP] Supprimer les doubles espaces
Plus de sujets relatifs à : fstream et espaces


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)