Искаженные символы, которые уничтожают доступ с помощью getline, как их заменить?

Я попытался получить доступ к файлу, который в какой-то момент содержит много искаженных символов. Я знаю, что это происходит после определенной строки (когда эта строка найдена с помощью getline: «key = 0»). Моя цель — избавиться от него, заменить всю строку на строку, т.е. «Привет», или заставить иметь \ п символ в конце. Как мне это сделать? Вы сталкивались с этим раньше? Здесь я объясняю код, но пока не удается преодолеть проблему. Кажется, что в конце строки нет \ n или есть символ, который не может быть прочитан. По сути, я хочу сделать программно то же, что и текст с командой «Заменить все».

Чтобы прояснить, как выглядит мой файл, вот оригинальный файл «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

Решение

Так что это легко сделать … однако, если в вашей строке есть символ EOF, я не знаю, пережил бы он переход к http://www.stackoverflow.com а затем в мой код. Но я надеюсь, что вы просто перевернули break логика из моего 1улица ответ: 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-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 уэ
2017-08-03 09:38:46 er
2017-08-03 09:38:46 ключ = 0
2017-08-03 09:38:46 81B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk =
2017-08-03 09:38:47 B9CEandrew499OEE4MUI5Q0VhbmRyZXc0OTk =
2017-08-03 09:38:48 бла
2017-08-03 09:38:49 ОК
2017-08-03 09:50:12 ключ = 0

Я написал пример: http://rextester.com/JCKF84982 но вам нужно поменять местами istringstream для ifstream,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector