String Buffer = "";

yanlou Messages postés 119 Statut Membre -  
Posotaz Messages postés 505 Statut Membre -
salut
j'ai un fichier .csv qui contient 27000 ligne et je veux suprrimer les ligne 4,5,6
ça fonction avec le code que j'ai mais ça prend presque 2min pour s'exécuté
y'a t'il unmoyenne pour minimiser le temps de l'execution

#include <string>
#include <fstream>

void Erase_Line1(char* z, int Line_to_Erase)
{
std::string Buffer = ""; //Variable contenant le texte à réécrire dans le fichier
std::ifstream ReadFile( z);
if (ReadFile) //Si le fichier est trouvé
{
std::string line;
int Line = 0;
while ( std::getline( ReadFile, line ) ) //on parcours le fichier et on initialise line à la ligne actuelle
{
Line++;
if(Line != Line_to_Erase) //Si la ligne atteinte est différente de la ligne à supprimer...
Buffer += line + "\n"; //On ajoute le contenu de la ligne dans le contenu à réécrire
}
}
ReadFile.close(); //On ferme le fichier en lecture

std::ofstream WriteFile( z); //On ouvre ce même fichier en écriture
WriteFile << Buffer; //On écris le texte dedans
WriteFile.close(); //et on ferme le fichier
}

int main()
{
Erase_Line1("z.txt", 4);
Erase_Line1("z.txt", 4);
Erase_Line1("z.txt", 4);

return 0;
}

3 réponses

ginto5 Messages postés 8747 Date d'inscription   Statut Membre Dernière intervention   653
 
J'ai le même pb de temps d'éxécution avec ungros fichier CSV dans lequel je supprime les 3/4 des enregistrements, ca mouline en mémoire mais le travail est correct a la sortie.
0
Posotaz Messages postés 505 Statut Membre 225
 
Salut,

Qu'est-ce qui prend du temps ? La lecture du fichier ou l'écriture ? Si j'auto-réponds à cette question je remarque que si dans ton code, l'écriture se fait en une seule fois au moyen d'un buffer, lors de la lecture le getline() va lire physiquement sur le fichier à chaque fois (ce qui prend du temps).

Ca fait longtemps que je ne fais plus de C++ mais je te suggère l'utilisation d'une fonction style fread() qui est normalement capable de lire un fichier en une seule fois pour placer son contenu dans un buffer que tu pourras parcourir... mais avec peut-être moins de facilités.
0
yanlou Messages postés 119 Statut Membre 13
 
le temps de l'excution !!
0
Posotaz Messages postés 505 Statut Membre 225
 
Heu... j'espère que tu te rends compte que cette réponse est tout à fait inutile. Je demandais justement l'exécution de quelle partie prenait du temps. Pour résoudre un problème, le mieux est de le cibler et tu n'y arriveras qu'en découpant ton code. Je t'ai donné des pistes, explore-les !
0