2017-08-10 106 views
0

ある時点で文字化けしているファイルにアクセスしようとしました。私はこれが特定の行の後に起こることを知っています(この文字列がgetlineで見つかった場合: "key = 0")。私の目標は、それを取り除き、行全体を文字列で置き換えることです。 "hello"、または末尾に\ nの文字を強制します。どうしたらいいですか?あなたは前にそれに直面しましたか?ここでは私のcodeについて説明しますが、問題を克服するためにこれまで管理していません。行末に\ nがないか、読み込めない文字があるようです。基本的には、私はテキスト "Replace all"コマンドで何をやっているのかをプログラムでやりたいと思っています。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++タグを追加しました。私はそれがすべてのdriveby downvotersを誘致することを忘れていた。ごめんなさい。 –

+0

はい私は実際にビジュアルスタジオを使用しています。なぜ彼らはそれをdownvoteだろうか?私がC++で書いているように、私はタグを持っていたいと思います。 – user6812514

答えて

0

だから、これを行うのは簡単です...しかし、あなたの文字列のEOF文字を持っている場合、私はそれを知りませんそれはhttp://www.stackoverflow.comへの移行から生き残り、その後私のコードに残っていたでしょう。あなたの入力から

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; 
     } 
    } 
} 

https://stackoverflow.com/a/45576655/2642059

このような場合は、このような単純なコードが正常に動作する必要があります。しかし、私はあなたは、単に私の1つの答えからあなた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 = 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日私は例を書いた0

午前9時38分49秒OK
2017年8月3日午前9時50分12秒キー=:http://rextester.com/JCKF84982istringstreamifstreamに交換する必要があります。

関連する問題