好的,我試圖刪除這些在Linux上編譯和運行我的程序時彈出的麻煩^ M字符。從Linux上生成的文件中刪除^ M
我已經嘗試運行
dos2unix filename
上的文件,以及^ M的保持。我也確保,隨時打開文件,我打開
ios::binary
有沒有辦法刪除M的?即使是系統調用也可以,我可以在我的代碼中調用也不錯,就像
std::system("Remove M's Command");
任何反饋將不勝感激。
謝謝。
好的,我試圖刪除這些在Linux上編譯和運行我的程序時彈出的麻煩^ M字符。從Linux上生成的文件中刪除^ M
我已經嘗試運行
dos2unix filename
上的文件,以及^ M的保持。我也確保,隨時打開文件,我打開
ios::binary
有沒有辦法刪除M的?即使是系統調用也可以,我可以在我的代碼中調用也不錯,就像
std::system("Remove M's Command");
任何反饋將不勝感激。
謝謝。
如果你的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.
}
在這種情況下,什麼是's'? – 2012-02-03 17:10:41
錯字。固定.. – 2012-02-03 17:41:00
冉這,^ M的仍然在文件中。是否有可能只是通過文件並刪除任何^ M的命令? – 2012-02-03 18:02:39
許多工具都會用正則表達式來實現。例如,Perl可以就地編輯文件:
# perl -i -p -e 's/\r//g' FILENAME
我不知道什麼是ios::binary
,但在我看來像的關鍵。
這聽起來與Apple系統有關,它們使用CR(^ M)字符而不是LF(而Windows使用兩者)。所以如果你只有CR,而不是CR-LF,那麼dos2unix將不起作用。
那麼,爲什麼不刪除ios::binary
(如@ Joachim-Isaksson建議)?
正如我所說,我已經嘗試了它沒有ios :: binary,只是把它放在看看它是否會解決這種情況,所以這不是罪魁禍首。不過謝謝。 – 2012-02-03 17:08:41
它指定以二進制模式打開文件:http://courses.cs.vt.edu/~cs2604/fall02/binio.html#open – 2012-02-03 17:44:50
你嘗試沒有IOS打開::二進制就讓它用文字模式? – 2012-02-03 14:48:29
在linux上生成什麼文件?除非您提出要求,否則Linux通常不會提供'^ M's。 – 2012-02-03 14:48:52
約阿希姆,是的我沒有嘗試過ios :: binary,仍然是同樣的麻煩。邁克,如果有幫助,使用的cpp文件是從Windows機器傳輸的。然而,dos2unix在此之前運行。 – 2012-02-03 14:50:18