2012-09-24 5 views
0

Salut je veux enregistrer de nombreux fichiers CSV à partir d'une fonction avec une convention de dénomination basée sur une double valeur différente. Je fais cela avec une boucle for et passe une valeur de chaîne pour enregistrer chaque fichier .csv différemment. Voici un exemple de ce que je suis en train de faire le résultat souhaité seraiterreur avec std :: ostringsteam et std :: string

1.1_file.csv 
1.2_file.csv 

mais je reçois

1.1_file.csv 
1.11.2_file.csv 

Voici un exemple de code de travail, que puis-je faire pour résoudre ce problème

#include <sstream> 
#include <iomanip> 
#include <cmath> 
#include <iostream> 
#include <vector> 

int main(){ 
    std::string file = "_file.csv"; 
    std::string s; 
    std::ostringstream os; 
    double x; 

    for(int i = 0; i < 10; i++){ 
     x = 0.1 + 0.1 *i; 
     os << std::fixed << std::setprecision(1); 
     os << x; 
     s = os.str(); 
     std::cout<<s+file<<std::endl; 
     s.clear(); 
    } 

    return 0; 
} 
+0

ce qui est le downvote aléatoire pour? – pyCthon

Répondre

1

le ostringstream ne réinitialise pas à chaque itération de la boucle, alors vous êtes juste à ce x ajoutant chaque itération; Placez-le dans le champ for pour que os devienne un objet propre différent à chaque itération ou réinitialise le contenu avec os.str(""). La variable s est également inutile; vous pouvez juste faire

std::cout << os.str() + file << std::endl; 

Et vous n'avez pas besoin s et vous éliminer les frais généraux de faire une copie de la chaîne.

1

Votre flux autrichien est ajouté pour chaque itération de la boucle. Vous devez effacer et réutiliser, comme indiqué ci-dessous (avec l'aimable autorisation: How to reuse an ostringstream? sur la façon de réutiliser un ostringstream)

#include <sstream> 
#include <iomanip> 
#include <cmath> 
#include <iostream> 
#include <vector> 

int main() { 

    std::string file = "_file.csv"; 
    std::string s; 

    double x; 
    std::ostringstream os; 

    for (int i = 0; i < 10; i++) { 

     x = 0.1 + 0.1 * i; 
     os << std::fixed << std::setprecision(1); 
     os << x; 
     s = os.str(); 
     std::cout << s + file << std::endl; 
     os.clear(); 
     os.str(""); 
    } 

    return 0; 
} 
+0

@SethCarnegie, peut-être, j'ai juste essayé de transmettre que 'os' devrait être local à la boucle' for'. – Vikdor

+0

Oh ouais oups, je pensais que vous l'avez ajouté. Je vais supprimer mon commentaire. –

Questions connexes