C++ Lire 1 fichier txt, écrire X fichier txt

[Résolu/Fermé]
Signaler
-
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
-
Bonjour,

Je souhaite lire un fichier texte contenant X colonnes, et écrire X fichiers texte ( 1 colonne = 1 fichier). mon code :


void readdata()
{
ifstream file ("out.txt", ios::in);

if ( file ) // Open file ?
{
cout << "Read out.txt ... ";
string buffer;
vector<string> Names;
string temp;
std::getline(file, buffer);
int i=0;
int ii=0;
int cutAt;
while( (cutAt = buffer.find_first_of(" ")) != buffer.npos )
{
if(cutAt > 0)
{
Names.push_back(buffer.substr(0,cutAt));
}
buffer = buffer.substr(cutAt+1);

temp = Names[ii];
temp = "Time/Time-"+ temp +".txt";
ofstream Names[ii] ( temp.c_str() , ios::out | ios::trunc);
}
if(buffer.length() > 0)
{
Names.push_back(buffer);
}

while (std::getline(file, buffer))
{
int cutAt;
while( (cutAt = buffer.find_first_of(" ")) != buffer.npos )
{
if(cutAt > 0)
{
Values.push_back(buffer.substr(0,cutAt));
}
buffer = buffer.substr(cutAt+1);
}
if(buffer.length() > 0)
{
Values.push_back(buffer);
}
C= Values.size();
int ii;
for(ii=0; ii < Values.size(); ii++)
{
double line;
file >> line;
x[i][ii] = line;
y[i][ii] = 0; // Im Part

temp = Names[ii];
temp = "Time/Time-"+ temp +".txt";
ofstream Names[ii] ( temp.c_str() , ios::out | ios::trunc);
fileout << line << endl ;
fileout.close();
}
i++;
}
}
else{cerr << "Impossible d'ouvrir le fichier out.txt !" << endl;}
file.close();
cout << "done" << endl;
}


Je pense que le probleme vient de : ofstream Names[ii] ( temp.c_str() , ios::out | ios::trunc);
je ne peux pas utiliser de vecteur dans ce genre d'expression ... quelqu'un a une solution ??

Merci d'avance !!
Cordialement
Pierre


5 réponses

Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 313
Salut.
ofstream Names[ii] ( temp.c_str() , ios::out | ios::trunc);
ça ne veux rien dire. Il faut couper en deux et avoir un nom pour chaque fichier.
strd::vector<ofstream> xfile;
xfile.push_back(ofstream(Names[ii].c_str(),ios::out));
Salut,
Merci pour votre réponse.
Lors de la compilation j'ai une erreur sur la ligne:
xfile.push_back(ofstream(Names[ii].c_str(),ios::out));
Faut-il ajouter une bibliothèque supplémentairement ?

J'utilise :
#include <cstdlib>
#include <fstream>
#include <vector>
#include <iostream>
#include <istream>
#include <sstream>
#include <math.h>
#include <stdio.h>
#include <time.h>

Cordialement
Pierre
Re-bonjour,
le code suivant fonctionne, il créer mas documents comme demander , par contre je n'arrive pas a écrire dedans... voici le code :

std::vector<std::ofstream*> xfile;

for(i=0;i<Names.size();i++)
{
temp = Names[i];
temp = "Vector/test-" + temp + ".txt";
xfile.push_back(new ofstream (temp.c_str(), std::ios::trunc));
}

Pour écrire dans un élément comment faire ?
Pourquoi cela ne fonctionne pas ?!
for(i=0;i<Names.size();i++)
{
xfile[i]<<"hello";
}
Merci d'avance !
Cordialement
Pierre
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 313
Salut.
ça ne fonctionne pas car tu utilises des pointeurs. Pour les utiliser il faut les déréférencer :
*(xfile[i])<<"hello";
Si tu as encore des erreurs de compilation, met les messages d'erreur, 9 fois sur 10 l'erreur est expliqué dans les messages.
Bonjour,
Merci pour votre réponse,je reviens vers vous;
Je n'ai pas d'erreur a la compilation avec ce code :

std::vector<std::ofstream*> xfile;
for(i=0;i<Names.size();i++)
{
temp = Names[i];
temp = "Vector/test-" + temp + ".txt";
xfile.push_back(new ofstream (temp.c_str(), ios::out | ios::trunc));
}
for(i=0;i<Names.size();i++)
{
*(xfile[i])<<"hello";
cout<<".";
}

Le programme s'effectue sans message d'erreur, cependant les fichiers sont vide a la fin de l'exécution. Pourquoi n'y a-t-il pas de hello dans chaque fichier ??
Merci d'avance pour votre aide,
Cordialement
Pierre
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 313
je pense que le mieux c'est de fermer proprement les fichiers avant de fermer le programme.
xfile[i]->close();