2012-02-03 67 views
1

好的,我試圖刪除這些在Linux上編譯和運行我的程序時彈出的麻煩^ M字符。從Linux上生成的文件中刪除^ M

我已經嘗試運行

dos2unix filename 

上的文件,以及^ M的保持。我也確保,隨時打開文件,我打開

ios::binary 

有沒有辦法刪除M的?即使是系統調用也可以,我可以在我的代碼中調用也不錯,就像

std::system("Remove M's Command"); 

任何反饋將不勝感激。

謝謝。

+0

你嘗試沒有IOS打開::二進制就讓它用文字模式? – 2012-02-03 14:48:29

+0

在linux上生成什麼文件?除非您提出要求,否則Linux通常不會提供'^ M's。 – 2012-02-03 14:48:52

+0

約阿希姆,是的我沒有嘗試過ios :: binary,仍然是同樣的麻煩。邁克,如果有幫助,使用的cpp文件是從Windows機器傳輸的。然而,dos2unix在此之前運行。 – 2012-02-03 14:50:18

回答

1

如果你的C++程序已經結構是這樣的:

std::string str; 
std::ifstream inputFile("file.txt", ios::binary); 
while (std::getline(inputFile, str)) { 
    // parse str and operate on the results 
} 

然後你就可以輕鬆地將其更改爲:

std::string str; 
std::ifstream inputFile("file.txt", ios::binary); 
while(std::getline(inputFile, str)) { 
    str.erase(std::remove(str.begin(), str.end(), '\r'), str.end()); 
    // parse str and operate on the results. 
} 
+0

在這種情況下,什麼是's'? – 2012-02-03 17:10:41

+0

錯字。固定.. – 2012-02-03 17:41:00

+0

冉這,^ M的仍然在文件中。是否有可能只是通過文件並刪除任何^ M的命令? – 2012-02-03 18:02:39

5

許多工具都會用正則表達式來實現。例如,Perl可以就地編輯文件:

# perl -i -p -e 's/\r//g' FILENAME 
-1

我不知道什麼是ios::binary,但在我看來像的關鍵。
這聽起來與Apple系統有關,它們使用CR(^ M)字符而不是LF(而Windows使用兩者)。所以如果你只有CR,而不是CR-LF,那麼dos2unix將不起作用。

那麼,爲什麼不刪除ios::binary(如@ Joachim-Isaksson建議)?

+0

正如我所說,我已經嘗試了它沒有ios :: binary,只是把它放在看看它是否會解決這種情況,所以這不是罪魁禍首。不過謝謝。 – 2012-02-03 17:08:41

+0

它指定以二進制模式打開文件:http://courses.cs.vt.edu/~cs2604/fall02/binio.html#open – 2012-02-03 17:44:50