2017-10-06 10 views
1

J'ai créé un bloc-notes ++ en C++ Il recherche entre un mot-clé dans un fichier journal et copie l'intégralité des données entre ce mot-clé (ce mot-clé apparaît exactement deux fois fichier ou ne se produit pas du tout). Voici mon code[Recherche dans le fichier texte] [Notepad ++ plugin en C++]

 std::ifstream in(curr_file_path); 
     std::string search("TEXT TO SEARCH"); 
    while (std::getline(in, line)) 
    { 
     r_val = line.find(search); 
     if (r_val != -1) 
     { 
      f_match = r_val; 
      r_val = -1; 
      while (r_val == -1) 
      { 
       std::getline(in, line); 
       r_val = line.find(search); 
       for (int i = 0; i < line.size(); i++) 
       { 
        pDestText[textLen++] = line[i]; 

       } 
      } 
      pDestText[textLen - 27] = '\0'; 
      break; 
     } 
    } 
} 

recherche est la chaîne à fichier searched.Input est. Ma requête est que le fichier journal est très grand, il prend le temps d'environ 5 seconds.Can i détecteront ce . Une optimisation que je pense saute d'abord 50000 lignes de code car je suis sûr que le texte que je cherche ne viendra pas en premier 50000 lignes. Mais y a-t-il une meilleure façon d'optimiser. Si non, quelqu'un peut-il dire comment sauter d'abord? lignes de code et de lancer une erreur si elle a moins de 50000 lignes.

+0

Si IO est le goulot d'étranglement, pensez à https://stackoverflow.com/a/4558426/7132300 – algrid

Répondre

0

Dans la recherche, je vous suggère d'utiliser un algorithme qui répondra à vos besoins

http://bigocheatsheet.com/

essayer de regarder ce lien car cela peut vous aider sur ce qu'il faut choisir. Il y a toujours des avantages et des inconvénients sur l'algorithme que vous utiliserez. vous pouvez également combiner deux ou plusieurs algorithmes ou même faire votre propre si vous pensez qu'il sera beaucoup plus optimisé que la liste.