2017-03-16 56 views
0

我一直在努力解決這一段時間。文本文件讀取丟失格式與放緩

讀取文本文件。

使用此代碼的格式獲取與函數getline更換......但時間加載文件簡直是太漫長......

std::string line = ""; 
    std::string file = ""; 
    std::ifstream filepath(path); 

    if (filepath.is_open()) 
    { 
     while (std::getline (filepath,line)) 
     {     
     file = file + line + "\r\n"; 
     } 

     filepath.close(); 
    } 

使用此代碼的時間來加載該文件是10倍左右更快,但格式化丟失:

 std::ifstream in(path); 
     std::stringstream stream; 

     stream << in.rdbuf(); 

     std::string file(stream.str()); 

是否有可能通過格式化第一個...獲得第二個方法的速度?或更好,但速度更快,格式不變?

我曾經考慮過在循環中的每個getline的第一個例子中不要繼續加載相同的字符串,但早期的嘗試似乎沒有幫助。

+0

因爲你是用C++ Builder,您可以用'的FileOpen /搜索/ FILEREAD/FILEWRITE/FileClose'你可以將整個文本文件加載到內存中,而無需做任何更改... fstreams速度很慢並且也在處理控制代碼(這就是爲什麼內容發生更改)。如果你想快速訪問文本文件,你也可以使用'Memo1-> Lines-> LoadFromFile(「file.txt」)'其中Memo1是VCL TMemo對象(你需要將它添加到表單中)。它不需要可見。 – Spektre

回答

0

好,再次檢查後,不知道這是什麼叫,但這個字符串優化照顧延遲和格式化......哎呀!

如果有人知道如何使它更快我很想學習如何...

std::string line = ""; 
    std::string file = ""; 
    std::string tmp_str = ""; 
    std::ifstream filepath(path); 
    unsigned int c = 0; 

    if (filepath.is_open()) 
    { 
     while (std::getline (filepath,line)) 
     { 
      tmp_str = tmp_str + line + "\r\n"; 
      c++; 
      if (c > 100) 
      { 
       file = file + tmp_str; 
       tmp_str = ""; 
       c = 0; 
      } 
     } 

     if (c != 0) 
     { 
      file = file + tmp_str; 
     } 

     filepath.close();