| View previous topic :: View next topic |
| Author |
Message |
Fanny Chevalier Guest
|
Posted: Thu Jul 22, 2004 8:57 am Post subject: Nom de fichier numerote |
|
|
Bonjour,
Je cherche a ecrire dans des fichiers dont le nom est genere au moyen
d'un compteur :
file_01.txt
file_02.txt
file_03.txt
etc...
j'ai utilise le code suivant :
#include <strstream>
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
string file = s.str();
ecrireFichier(file);
}
cependant strstream a l'air d'etre une en-tete un peu vieillote et mes
noms de fichiers
ont des caracteres bizarre apre le .txt...
Avec quoi dois-je remplacer cette portion de code pour avoir des noms de
fichiers corrects?
(hormis char *, je veux rester avec string)
Merci par avance,
Fanny
|
|
| Back to top |
|
 |
David Geldreich Guest
|
Posted: Thu Jul 22, 2004 11:04 am Post subject: Re: Nom de fichier numerote |
|
|
Bonjour Fanny,
Fanny Chevalier wrote:
| Quote: | for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
string file = s.str();
ecrireFichier(file);
}
cependant strstream a l'air d'etre une en-tete un peu vieillote et mes
noms de fichiers
ont des caracteres bizarre apre le .txt...
Avec quoi dois-je remplacer cette portion de code pour avoir des noms de
fichiers corrects?
|
Il manque le marqueur de fin de chaine:
s << "file_" << i << ".txt" << ends;
A suivre...
|
|
| Back to top |
|
 |
Spoofix Guest
|
Posted: Thu Jul 22, 2004 11:05 am Post subject: Re: Nom de fichier numerote |
|
|
"Fanny Chevalier" <chevalie (AT) labri (DOT) fr> a écrit dans le message de
news:cdo207$svr$1 (AT) news (DOT) u-bordeaux.fr...
| Quote: | Bonjour,
Je cherche a ecrire dans des fichiers dont le nom est genere au moyen
d'un compteur :
file_01.txt
file_02.txt
file_03.txt
etc...
j'ai utilise le code suivant :
#include
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
string file = s.str();
ecrireFichier(file);
}
cependant strstream a l'air d'etre une en-tete un peu vieillote et mes
noms de fichiers
ont des caracteres bizarre apre le .txt...
Avec quoi dois-je remplacer cette portion de code pour avoir des noms de
fichiers corrects?
(hormis char *, je veux rester avec string)
|
Mettre s << "file_" << i << ".txt"<
|
|
| Back to top |
|
 |
Falk Tannhäuser Guest
|
Posted: Thu Jul 22, 2004 11:22 am Post subject: Re: Nom de fichier numerote |
|
|
Fanny Chevalier wrote:
| Quote: |
Bonjour,
Je cherche a ecrire dans des fichiers dont le nom est genere au moyen
d'un compteur :
file_01.txt
file_02.txt
file_03.txt
etc...
j'ai utilise le code suivant :
#include <strstream
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
|
Ici, il manque ' << ends' à la fin, afin d'insérer ' ' pour terminer
la chaîne de caractères.
| Quote: | string file = s.str();
ecrireFichier(file);
}
cependant strstream a l'air d'etre une en-tete
un peu vieillote et mes noms de fichiers
ont des caracteres bizarre apre le .txt...
Avec quoi dois-je remplacer cette portion de
code pour avoir des noms de fichiers corrects?
|
#include
#include <iomanip>
for(unsigned i=0; i
{
std::ostringstream os;
os << "file_" << std::setfill('0') << std::setw(2) << i << ".txt";
ecrireFichier(os.str());
}
Falk
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Thu Jul 22, 2004 12:03 pm Post subject: Re: Nom de fichier numerote |
|
|
Fanny Chevalier <chevalie (AT) labri (DOT) fr> writes:
| Quote: | #include <strstream
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
string file = s.str();
ecrireFichier(file);
}
|
Si je me souviens bien, tu dois utiliser std::strstream::freeze()
avant d'accéder à la chaîne, ce dont tu n'as pas besoin avec
std::stringstream. As-tu des raisons d'utiliser std::strstream plutôt
que std::stringstream ?
#include
#include <sstream>
for ( int i = 0 ; i < nbreFichiers ; ++ i ) {
stringstream s ;
s << "file_" << std::setw( 2 ) << i << ".txt" ;
ecrireFichier( s.str() ) ;
}
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
|
|
| Back to top |
|
 |
Fanny Chevalier Guest
|
Posted: Thu Jul 22, 2004 12:13 pm Post subject: Re: Nom de fichier numerote |
|
|
| Quote: |
Si je me souviens bien, tu dois utiliser std::strstream::freeze()
avant d'accéder à la chaîne, ce dont tu n'as pas besoin avec
std::stringstream. As-tu des raisons d'utiliser std::strstream plutôt
que std::stringstream ?
#include
#include
for ( int i = 0 ; i < nbreFichiers ; ++ i ) {
stringstream s ;
s << "file_" << std::setw( 2 ) << i << ".txt" ;
ecrireFichier( s.str() ) ;
}
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Pas de raisons d'utiliser strstream : c'est ce que j'avais trouve sur le |
net...
J'ai remplace par des stringstream et ai ajoute ends, ca fonctionne tres
bien.
Merci
|
|
| Back to top |
|
 |
Bertrand Motuelle Guest
|
Posted: Thu Jul 22, 2004 1:45 pm Post subject: Re: Nom de fichier numerote |
|
|
Fanny Chevalier <chevalie (AT) labri (DOT) fr> wrote
| Quote: | Je cherche a ecrire dans des fichiers dont le nom est genere au moyen
d'un compteur :
file_01.txt
file_02.txt
file_03.txt
etc...
j'ai utilise le code suivant :
#include <strstream
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
string file = s.str();
ecrireFichier(file);
}
cependant strstream a l'air d'etre une en-tete un peu vieillote et mes
noms de fichiers ont des caracteres bizarre apre le .txt...
Avec quoi dois-je remplacer cette portion de code pour avoir des noms de
fichiers corrects?
|
Avec std::stringstream:
#include
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
std::ostringstream s;
s << "file_" << i << ".txt";
std::string file = s.str();
ecrireFichier(file);
}
Pour info, avec strstream il faut prendre un peu plus de précautions:
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
std::ostrstream s;
s << "file_" << i << ".txt" << std::ends;// Marque la fin de chaîne
std::string file = s.str(); // str() retourne un char*
// et te donne la responsabilité
// de désallouer ce buffer.
s.rdbuf()->freeze(0); // Retourne au stream la
// responsabilité du buffer.
// Sans ca, (c.f. ton code)
// tu as une fuite mémoire.
ecrireFichier(file);
}
Bertrand.
|
|
| Back to top |
|
 |
heinquoi Guest
|
Posted: Thu Jul 22, 2004 4:20 pm Post subject: Re: Nom de fichier numerote |
|
|
"Fanny Chevalier" <chevalie (AT) labri (DOT) fr> a écrit dans le message de
news:cdo207$svr$1 (AT) news (DOT) u-bordeaux.fr...
| Quote: | Bonjour,
Je cherche a ecrire dans des fichiers dont le nom est genere au moyen
d'un compteur :
file_01.txt
file_02.txt
file_03.txt
etc...
j'ai utilise le code suivant :
#include
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
string file = s.str();
ecrireFichier(file);
}
cependant strstream a l'air d'etre une en-tete un peu vieillote et mes
noms de fichiers
ont des caracteres bizarre apre le .txt...
|
deja eu le probleme, strstream ne semble pas s'occuper du ' ' terminal des
chaine de caractère ( normal c'est un flux!)
m'on problème à ete résolu en rajoutant un ' ' à la fin du strstream pour
pouvoir le reutilisé ensuite comme une chaine finissant par
cela donne
s << "file_" << i << ".txt" << ' ';
| Quote: | Avec quoi dois-je remplacer cette portion de code pour avoir des noms de
fichiers corrects?
(hormis char *, je veux rester avec string)
Merci par avance,
de rien, j'espère avoir pu aidé ! |
--
Cordialement,
Heinquoi
|
|
| Back to top |
|
 |
heinquoi Guest
|
Posted: Thu Jul 22, 2004 4:29 pm Post subject: Re: Nom de fichier numerote |
|
|
--
Cordialement,
Heinquoi
"Spoofix" <xxx (AT) xxx (DOT) xxx.invalid> a écrit dans le message de
news:cdo6sj$65v$1 (AT) apollon (DOT) grec.isp.9tel.net...
| Quote: |
"Fanny Chevalier" <chevalie (AT) labri (DOT) fr> a écrit dans le message de
news:cdo207$svr$1 (AT) news (DOT) u-bordeaux.fr...
Bonjour,
Je cherche a ecrire dans des fichiers dont le nom est genere au moyen
d'un compteur :
file_01.txt
file_02.txt
file_03.txt
etc...
j'ai utilise le code suivant :
#include
for (unsigned int i = 0 ; i < nbreFichiers ; i++)
{
strstream s;
s << "file_" << i << ".txt";
string file = s.str();
ecrireFichier(file);
}
cependant strstream a l'air d'etre une en-tete un peu vieillote et mes
noms de fichiers
ont des caracteres bizarre apre le .txt...
Avec quoi dois-je remplacer cette portion de code pour avoir des noms de
fichiers corrects?
(hormis char *, je veux rester avec string)
Mettre s << "file_" << i << ".txt"<
endl ne met pas un caractère de fin de chaine, mais un caractère de retour |
à la ligne. Cela semble fonctionner, mais en faite uniquement si ta fonction
d'ouverture-creation fichier ne prend que la 1ere ligne. En essayant avec un
cout pour afficher cette string tu auras des surprises...ta 1ere ligne seras
bien mais tes smocks serons sur la ligne suivante.
je te conseille donc un
s << "file_" << i << ".txt" << ' '.
--
Cordialement,
Heinquoi
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Thu Jul 22, 2004 5:42 pm Post subject: Re: Nom de fichier numerote |
|
|
"heinquoi" <nospam*heinquoi1 (AT) libertysurf (DOT) fr> writes:
| Quote: | s << "file_" << i << ".txt" << ' '.
|
s << "file_" << i << ".txt" << std::ends ;
comme il a été dit par ailleurs, et que j'ai oublié de préciser dans
ma réponse. L'effet est s.put(' ').
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
|
|
| Back to top |
|
 |
Loïc Joly Guest
|
Posted: Thu Jul 22, 2004 6:09 pm Post subject: Re: Nom de fichier numerote |
|
|
Fanny Chevalier wrote:
| Quote: |
Si je me souviens bien, tu dois utiliser std::strstream::freeze()
avant d'accéder à la chaîne, ce dont tu n'as pas besoin avec
std::stringstream. As-tu des raisons d'utiliser std::strstream plutôt
que std::stringstream ?
#include
#include
for ( int i = 0 ; i < nbreFichiers ; ++ i ) {
stringstream s ;
s << "file_" << std::setw( 2 ) << i << ".txt" ;
ecrireFichier( s.str() ) ;
}
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Pas de raisons d'utiliser strstream : c'est ce que j'avais trouve sur le
net...
J'ai remplace par des stringstream et ai ajoute ends, ca fonctionne tres
bien.
|
Si tu as remplacé par stringstream, tu n'as pas besoin de ends. Je
dirais même qu'il pourrait être faux de l'ajouter. Regarde par exemple
la taille d'un "file_01.txt" obtenue par cette méthode et celle de la
constante "file_01.txt".
--
Loïc
|
|
| Back to top |
|
 |
heinquoi Guest
|
Posted: Thu Jul 22, 2004 10:53 pm Post subject: Re: Nom de fichier numerote |
|
|
"drkm" <usenet.fclcxx (AT) fgeorges (DOT) org> a écrit dans le message de
news:wkoem8547g.fsf (AT) fgeorges (DOT) org...
| Quote: | "heinquoi" <nospam*heinquoi1 (AT) libertysurf (DOT) fr> writes:
s << "file_" << i << ".txt" << ' '.
s << "file_" << i << ".txt" << std::ends ;
comme il a été dit par ailleurs, et que j'ai oublié de préciser dans
ma réponse. L'effet est s.put(' ').
|
tout a fait.
la définition de ends est:
_CRTIMP inline basic_ostream&
__cdecl ends(basic_ostream<char, char_traits& _O)
{_O.put(' ');
return (_O); }
donc effectivement un s.put (' ').
c'est comme on veut !
--
Cordialement,
Heinquoi
|
|
| Back to top |
|
 |
|