String Buffer = "";

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

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. 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.
      1. le temps de l'excution !!
        1. 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 !