2012-12-19 124 views
0

我有一個包含大量文件(如.tar)的二進制文件,我可以在其中找到二進制文件和文本文件。從二進制文件中讀取文本時避免 r n

當存儲器串加工,運輸線路通常是「\ n」,但如果我讀的文本部分從該壓縮文件,我得到「\ r \ n」。因此處理這個文本給我錯誤。

下面是從二進制文件中讀取文本代碼:

​​

這給了我正確的文本轉換成數據,但下面的代碼給我讀一個空行,當錯誤:

istringstream ss(data);  // create a stringstream to process it in another function 
delete[] data;    // free the data buffer 

// start processing the file 
string line; 
getline(infile, line);  // read an empty line 

if(line.size() > 0) { 
    /* 
    enters here, because the "empty" line was "\r\n", and now the value of line is '\r', therefore line.size() == 1 
    */ 
    ... 

那麼,有什麼建議可以避免'\ r'?

我在Notepad ++上編輯它。將其配置更改爲使用'\ n'而不是'\ r \ n'作爲座標系運行,但我不想依賴於此,因爲其他人可能會錯過它,並且如果發現問題很難那個會發生。

回答

1

可能最容易修剪字符串中的'\ r'字符,然後放棄空白行。看到這個答案的方法修剪的std :: string(我假定這就是「行」是):

What's the best way to trim std::string?

+0

左右,基本取代「\ r \ n」爲「\ n」現實時間。 這是明顯的答案,增加boost :: trim_right(line);在getline工作後,但我預計會有更有效率的東西,或更好的... – danikaze

+0

不是我所知道的,至少如果您需要處理真正的二進制數據。當然,如果你的數據都是可打印的,你可以在文本模式下打開它(「r」而不是「rb」),這將爲你處理。 – HerrJoebob