2017-08-10 111 views
0

我試圖訪問一個文件,在某個時候有很多亂碼的文字。我知道這發生在特定行之後(如果使用getline:「key = 0」發現此字符串)。我的目標是擺脫它,用一個字符串替換整行,即。 「你好」,或強制讓最後的字符具有該字符。我該怎麼做?你以前面對過嗎?在這裏,我解釋我的code,但它到目前爲止還沒有解決這個問題。似乎在行尾沒有\ n,或者有一個字符不能被讀取。基本上,我想以編程方式做我會用文本「全部替換」命令。使用getline粉碎訪問的亂碼字符,如何替換它們?

爲了清楚我的文件是怎麼樣的,在這裏它是原始的「example.log」(我不能附加到某處)。

2017-08-03 09:38:46 Expeum im6 
2017-08-03 09:38:46 nubla4 
2017-08-03 09:38:46 blaze 
2017-08-03 09:38:46 ue 
2017-08-03 09:38:46 er 
2017-08-03 09:38:46 key = 0 
2017-08-03 09:38:46 Q2žl2pE&ö³„Ôï¬ÈL+g…^cÎ1áø/7E›¸¥ü‰úLÎ’Æ 
2017-08-03 09:38:46 81B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk= 
2017-08-03 09:38:47 B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk= 
2017-08-03 09:38:48 bla 
2017-08-03 09:38:49 OK 
2017-08-03 09:50:12 key = 0 
2017-08-03 09:50:12 E&ö³„Ôï¬ÈL+g…^cÎ1áø/7E›¸¥ü‰úLÎ’Æ 

,這裏是我在截除文件獲得:

2017-08-03 09:38:46 Expeum im6 
2017-08-03 09:38:46 nubla4 
2017-08-03 09:38:46 blaze 
2017-08-03 09:38:46 ue 
2017-08-03 09:38:46 er 
+0

因此,您所需的輸出包含「key = 0」行和其他所有內容*,但*緊跟在「key = 0」行之後的行?你在使用Visual Studio嗎?我只是想知道在這些行中是否可以解釋爲EOF字符? –

+0

糟糕,我添加了C++標籤。我忘記了會吸引所有通過downvoters的驅動器。對不起。 –

+0

是的,我確實使用visual studio。他們爲什麼會低估它?因爲我正在用C++編寫我想要有標籤。 – user6812514

回答

0

所以這是很容易做到......但是如果你在你的字符串EOF字符我不知道做它會在轉換到http://www.stackoverflow.com後存活下來,然後存入我的代碼中。但我希望你只是從我1 ST答案倒你break邏輯:https://stackoverflow.com/a/45576655/2642059

如果是這樣的話,那麼像這樣簡單的代碼應該很好地工作:

tm iTm; 
string iString; 
const auto replaceAll = "hello"; 

while(f >> get_time(&iTm, " %Y - %m - %d %T ") && getline(f, iString)) { 
    cout << put_time(&iTm, "%F %T ") << iString << endl; 

    if(iString == "key = 0"s) { 
     cout << put_time(&iTm, "%F %T ") << replaceAll << endl; 
     if(!f.ignore(numeric_limits<std::streamsize>::max(), '\n')) { 
      break; 
     } 
    } 
} 

從你輸入文件的代碼給我:

2017年8月3日9時38分46秒Expeum IM6
2017年8月3日9時38分46秒nubla4
2 017-08-03 09:38:46大火
2017-08-03 09:38:46 ue
2017-08-03 09:38:46 er
2017-08-03 09:38:46 key = 0
2017年8月3日9點38分46秒= 81B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk
2017年8月3日9點38分47秒= B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk
2017年8月3日9時38分48秒BLA
2017年8月3日九時38分49秒OK
2017年8月3日九時五十分12秒鍵= 0

我寫了一個例子:http://rextester.com/JCKF84982,但您需要將istringstream換成ifstream

相關問題