OVH Cloud OVH Cloud

Nom de fichier numerote

11 réponses
Avatar
Fanny Chevalier
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

10 réponses

1 2
Avatar
David Geldreich
Bonjour Fanny,

Fanny Chevalier wrote:
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...

Avatar
Spoofix
"Fanny Chevalier" a écrit dans le message de
news:cdo207$svr$
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)


Mettre s << "file_" << i << ".txt"<<endl; ?

Avatar
Falk Tannhäuser
Fanny Chevalier wrote:

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.

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 <sstream>
#include <iomanip>

for(unsigned i=0; i<nbreFichiers; ++i)
{
std::ostringstream os;
os << "file_" << std::setfill('0') << std::setw(2) << i << ".txt";
ecrireFichier(os.str());
}

Falk

Avatar
drkm
Fanny Chevalier writes:

#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 <iomanip>
#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

Avatar
Fanny Chevalier

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 <iomanip>
#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


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

Avatar
tib.motuelle
Fanny Chevalier wrote in message news:<cdo207$svr$...
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 <sstream>

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.

Avatar
heinquoi
"Fanny Chevalier" a écrit dans le message de
news:cdo207$svr$
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...


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" << '';



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

Avatar
heinquoi
--
Cordialement,
Heinquoi
"Spoofix" a écrit dans le message de
news:cdo6sj$65v$

"Fanny Chevalier" a écrit dans le message de
news:cdo207$svr$
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)


Mettre s << "file_" << i << ".txt"<<endl; ?
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


Avatar
drkm
"heinquoi" <nospam* 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('').

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Avatar
Loïc Joly
Fanny Chevalier wrote:



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 <iomanip>
#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


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


1 2