2017-08-10 29 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

相关问题