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

  FORUM HardWare.fr
  Programmation
  C++

  nom de fichier variable? ofstream fich(var,ios::out),synthax macro?who

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

nom de fichier variable? ofstream fich(var,ios::out),synthax macro?who

n°235895
NathalieCo​m
Posté le 28-10-2002 à 14:23:43  profilanswer
 

je voudrai creer un objet de flux de la classe ofstream, mais pour plusieurs fichiers, donc j'ai opté pour l'ecriture svt:
 

Code :
  1. //les includes.......;
  2. #define RACINE "e:\\"
  3. #difine EXT ".dat"
  4. #define FICH RACINE##nom##EXT
  5. //instructions.......
  6. string nom;
  7. cin>>nom
  8. ofstream fichier(FICH,ios::out);
  9. //suite d'instructions.......


 
 
vous allez me dire que c'est logique
FICH est const hors qu'il doit etre un string ou un char*.
 
:

Code :
  1. //les includes.......;
  2. #define RACINE "e:\\"
  3. #difine EXT ".dat"
  4. #define FICH RACINE##nom##EXT
  5. //instructions.......
  6. string nom;
  7. cin>>nom
  8. string fic=(reinterpret_cast<char*>FICH)
  9. ofstream fichier(fic,ios::out);
  10. //suite d'instructions.......


 
et portant ça ne va pas.
aidez moi s'il vous plait.
merci bcp.
 

mood
Publicité
Posté le 28-10-2002 à 14:23:43  profilanswer
 

n°235903
kjus
Posté le 28-10-2002 à 14:28:56  profilanswer
 

il faut metre FICH.c_str() je pense.

Code :
  1. ofstream fichier(FICH.c_str(),ios::out);

n°236110
NathalieCo​m
Posté le 28-10-2002 à 18:21:52  profilanswer
 

tout simplement?
tu sais on me dit souvent que j'ai pas l'esprit objet.je peux dir qu'ils ont raison.
merci bcp.

n°236123
NathalieCo​m
Posté le 28-10-2002 à 18:40:11  profilanswer
 

tu sais j'ai essayé , mais ça ne va pas.
quelqu'un pourrait m'aider??
merci

n°236315
Musaran
Cerveaulté
Posté le 29-10-2002 à 01:19:59  profilanswer
 

Rappel: Le préprocesseur fait du traitement de texte sur le source avant compilation, et ne comprend rien au langage C ou C++.

Code :
  1. ofstream fichier(FICH,ios::out); //Ceci...
  2. ofstream fichier("e:\\"nom".dat",ios::out); //...devient ceci, qui n'est pas valide.

## sert à coller deux mots pour en former un troisième. Dans ce cas-ci, ce n'était pas possible, et cela aurait dû être une erreur.
 
# sert à transfomer en chaîne littérale:

Code :
  1. #define FICH RACINE#nom#EXT
  2. ofstream fichier(FICH,ios::out); //Ceci...
  3. ofstream fichier("e:\\""nom"".dat",ios::out); //...devient ceci...
  4. ofstream fichier("e:\\nom.dat",ios::out); //...équivalent à ceci.

Ça marche pour des chaînes littérales, sans plus.
 
Correction simple:

Code :
  1. #define FICH RACINE+nom+EXT
  2. string nom;
  3. cin>>nom;
  4. ofstream fichier(FICH,ios::out); //Ceci...
  5. ofstream fichier("e:\\"+nom+".dat",ios::out); //...devient ceci.

Ça marche, car "nom" se trouve être ici une std::string, qui surcharge l'opérateur + pour concaténer et générer une string temporaire.
 
Je ne saurais trop te conseiller de n'utiliser l'archaïque pré-processeur qu'en dernier recours:

Code :
  1. const string Racine= "e:\\";
  2. const string Extension= ".dat";
  3. string nom;
  4. cin>>nom
  5. string nomsys= Racine+nom+Extension;
  6. ofstream fichier(nomsys,ios::out);


Les amateurs de performance préfèrent comme ça:

Code :
  1. string nomsys(Racine);
  2. string nomsys+= nom;
  3. string nomsys+= Extension;


 
Ah oui... le "reinterpret_cast" est un truc sauvage, qui ordonne au compilateur d'obéir sans discuter.
C'est dangereux, car les messages du compilateur sont importants, il sait mieux que nous ce qui se passe (mal).
À n'utiliser que rarement, si l'on sait ce que l'on fait.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°236406
NathalieCo​m
Posté le 29-10-2002 à 09:24:18  profilanswer
 

merci Musaran.
tu sais si je t'avais comme prof , je ne serais pas ici.
merci à tous.

n°236493
NathalieCo​m
Posté le 29-10-2002 à 11:43:48  profilanswer
 

Musaran a écrit a écrit :

Rappel: Le préprocesseur fait du traitement de texte sur le source avant compilation, et ne comprend rien au langage C ou C++.

Code :
  1. ofstream fichier(FICH,ios::out); //Ceci...
  2. ofstream fichier("e:\\"nom".dat",ios::out); //...devient ceci, qui n'est pas valide.

## sert à coller deux mots pour en former un troisième. Dans ce cas-ci, ce n'était pas possible, et cela aurait dû être une erreur.
 
# sert à transfomer en chaîne littérale:

Code :
  1. #define FICH RACINE#nom#EXT
  2. ofstream fichier(FICH,ios::out); //Ceci...
  3. ofstream fichier("e:\\""nom"".dat",ios::out); //...devient ceci...
  4. ofstream fichier("e:\\nom.dat",ios::out); //...équivalent à ceci.

Ça marche pour des chaînes littérales, sans plus.
 
Correction simple:

Code :
  1. #define FICH RACINE+nom+EXT
  2. string nom;
  3. cin>>nom;
  4. ofstream fichier(FICH,ios::out); //Ceci...
  5. ofstream fichier("e:\\"+nom+".dat",ios::out); //...devient ceci.

Ça marche, car "nom" se trouve être ici une std::string, qui surcharge l'opérateur + pour concaténer et générer une string temporaire.
 
Je ne saurais trop te conseiller de n'utiliser l'archaïque pré-processeur qu'en dernier recours:

Code :
  1. const string Racine= "e:\\";
  2. const string Extension= ".dat";
  3. string nom;
  4. cin>>nom
  5. string nomsys= Racine+nom+Extension;
  6. ofstream fichier(nomsys,ios::out);


Les amateurs de performance préfèrent comme ça:

Code :
  1. string nomsys(Racine);
  2. string nomsys+= nom;
  3. string nomsys+= Extension;


 
Ah oui... le "reinterpret_cast" est un truc sauvage, qui ordonne au compilateur d'obéir sans discuter.
C'est dangereux, car les messages du compilateur sont importants, il sait mieux que nous ce qui se passe (mal).
À n'utiliser que rarement, si l'on sait ce que l'on fait.




 
 
tu sais, j'ai essayé ce que tu m'as conseillé mais il me rend l'erreur suivante.
 
 error C2664: '__thiscall std::basic_ofstream<char,struct std::char_traits<char> >::std::basic_ofstream<char,struct std::char_traits<char> >(const char *,int)' : cannot convert parameter 1 from 'class std
::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'
 
merci de me dir ce que c'est

n°237038
kjus
Posté le 30-10-2002 à 00:50:16  profilanswer
 

ca veut justement dire que lorsque tu veux ouvrir ton fichier avec  ofstream fichier(...), cette fonction prend en argument un const char* et non un string que tu lui propose.
Il faut donc faire ton_string.c_str() :D

n°237047
Musaran
Cerveaulté
Posté le 30-10-2002 à 01:05:41  profilanswer
 

Je l'oublie toujours.
Désolé  :o


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°237252
NathalieCo​m
Posté le 30-10-2002 à 14:23:46  profilanswer
 

merci à tous


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

  nom de fichier variable? ofstream fich(var,ios::out),synthax macro?who

 

Sujets relatifs
Best practice Java : déclaration d'1 variable (locale) dans une boucletéléchargement d'un fichier
traitement sur fichierEnvoie d'une variable avec SendData --- Besoin d'aide :(
Div et variable, placer un div en fonction d'une variable ??comment créer un menu "fichier, edition , format....." en VB
Word et macro VB : recuperer le nb de caracteres du doc[BCB6] Ecrire un fichier au format Access ?
[VB.NET] SVP, Comment utiliser le fichier app.config?sauver des objets de class ds un fichier et les chercher apres,posibl?
Plus de sujets relatifs à : nom de fichier variable? ofstream fich(var,ios::out),synthax macro?who


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