从Linux上生成的文件中删除^ M.

时间:2012-02-03 14:44:09

标签: c++ c linux text-files

好吧,我正在尝试删除在Linux上编译和运行程序时弹出的这些讨厌的^ M字符。

我试图运行

dos2unix filename

在文件上,^ M仍然存在。我也确定无论何时打开文件,我都会打开

ios::binary

有没有办法删除M?即使是系统调用,我可以在我的代码中调用也可以,例如

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

任何反馈都会非常感激。

感谢。

3 个答案:

答案 0 :(得分:5)

许多工具都会使用正则表达式。例如,perl可以就地编辑文件:

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

答案 1 :(得分: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.
}

答案 2 :(得分:-1)

我不确定ios::binary是什么,但在我看来就像钥匙一样 它听起来与Apple系统有关,它们使用CR(^ M)字符而不是LF(而Windows使用两者)。因此,如果您只有CR而不是CR-LF,则dos2unix将无效。

那么为什么不删除ios::binary(正如@Joachim-Isaksson建议的那样)?