Удаление ^ M из файла, созданного в Linux - PullRequest
1 голос
/ 03 февраля 2012

Хорошо, я пытаюсь удалить эти противные символы ^ M, которые появляются, когда я компилирую и запускаю свою программу в Linux.

Я пытался запустить

dos2unix filename

в файле, а ^ M остаются. Я также удостоверился, что каждый раз, когда я открываю файл, я открываю с

ios::binary

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

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

Любая обратная связь будет наиболее ценной.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 03 февраля 2012

Ряд инструментов сделает это с регулярным выражением.Например, Perl может редактировать файл на месте:

# perl -i -p -e 's/\r//g' FILENAME
1 голос
/ 03 февраля 2012

Если ваша программа на 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 голосов
/ 03 февраля 2012

Я не уверен, что такое ios::binary, но мне кажется, что это ключ.
Это похоже на системы Apple, и они используют символ CR (^ M) вместо LF (в то время как Windows использует оба). Так что если у вас есть только CR, а не CR-LF, то dos2unix не будет работать.

Так почему бы просто не удалить ios::binary (как предложил @ Joachim-Isaksson)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...