2015-02-09 2 views
0

У меня есть текстовый файл заполнен символами, похожими на эти:C++, GetLine() не могу правильно загрузить все символы

¶§čç†8,ĄyŚ}¦PÜĎY®Všw†inmĘkÚhíU”*Q–­Ö}W"ĄőK=Ć“7ßńĎ_0§ĄŚĆš‰ö¤˝†’?šŕý 
î7ź®xż¶¸tÔuYÖa7Ź+6cE#U+:ç˛ů€°6%·˝Î÷Ľm‹¶ĺ¬‰,Y¤r$Ň“üDGhô‚J°ÜYŽäóa·7¶1Ľľ˝.— 
bőľaŇ•Ďűż3«ű4°JT.ń¨kŢ&Ś6ÄmĆŕY0Ż/´~9.źÍéşď®ŁýçľURíOQS ›iJ±bĄB“˝¸&§řőUdüió^˛l˛ 
\›¨úlu+ĆŃSÔPÖDő±Qf6Ö\yÁ17$ŘĆMńŻß:g’×@ř–äy§_ĺąFsMWÓ‰[email protected]ݱ˝BvÓᯍ’;F¦jąÔî/ż/Ă 

И есть почти сотни строк из них. Его в основном тот же беспорядок, который вы получите, когда откроете какое-то изображение в блокноте.

Моя задача состоит в том, чтобы найти скрытые слова внутри этого файла, например: «яблоко», «автомобиль» и т.д. То, что я получил это:

ifstream buffer; 
buffer.open("myFile.txt"); 

string str1; 

while(getline(buffer, str1)){ 

if(str1.find("apple")!=std::string::npos) 
      counter++; 

if(str1.find("car")!=std::string::npos) 
      counter++; 

} 

Он отлично работает, когда я открываю файл с «нормальным ", но до тех пор, пока есть эти необычные символы, getline() имеет проблемы с загрузкой целых строк.

Я добавил эту строку в этот цикл:

myOutputFile << str1; 

Чтобы убедиться, если GetLine загружается все строки правильно, но в моем выходе тестирования файл был написан только + -30 строк из CCA 200 .. Я попробовал также функцию get(), но результат был таким же. Кажется, что есть некоторый символ, который обрабатывает/getline can not handle и заставляет его останавливать загрузку следующих символов/строк.

Итак, мой вопрос: есть ли способ заставить getline справиться с этой ситуацией или вообще каким-либо образом найти конкретные слова среди таких странных персонажей?

спасибо.


РЕШИТЬ:

Я открытый файл в двоичном режиме и его работает.

buffer.open("myFile.txt", ios::binary); 

Большое спасибо Cheers and hth. - Alf

+0

Я подозреваю, что вы столкнулись с внедренными нулями. –

+0

Вы уверены, что «яблоко» не может появляться дважды в одной строке? – Beta

+0

@Beta Это может быть, но точное число не так важно для меня прямо сейчас. Я был бы все равно благодарен, если бы мог найти хотя бы одно слово. Прямо сейчас я на 0. –

ответ

0

В Windows Ctrl Z (ASCII 26) по соглашению укажет конец текста.

Чтобы этого избежать, откройте файл как двоичный.

Или использовать двоичный файл нижнего уровня ввода-вывода.

+0

Я думал, что я избегу этого, удалив eof из условия в цикле –