2012-02-03 17 views
1

Linuxでプログラムをコンパイルして実行するときにポップアップ表示されるこれらの厄介な^ M文字を削除しようとしています。Linuxで生成されたファイルから^ Mを削除する

私は、ファイルに

dos2unix filename 

を実行しようとし、そして^ Mのままにしました。私はファイルを開いているときはいつでも開くことを確認しました

ios::binary 

Mを削除する方法はありますか?私のコード内で呼び出すことができるシステムコールでさえもうまくいくでしょう。

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

フィードバックはどれも非常に高く評価されます。

ありがとうございました。

+0

あなたは、IOSなしで開こうとしました::ちょうどそれが使用できるようにバイナリテキストモード? –

+0

Linuxでどのファイルが生成されましたか?あなたがそれを聞かない限り、Linuxは通常 '^ M'を入れません。 –

+0

ヨアヒム、はい私はイオス::バイナリを使わずに、同じ問題に挑戦しました。 Mike、助けがあれば、使用されたcppファイルはWindowsマシンから転送されました。 dos2unixは手でこれの前にしかし走った。 –

答えて

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」とは何ですか? –

+0

タイプミス。修正されました。 –

+0

これで、^ Mはまだファイルに残っています。おそらくファイルを通過して^ Mを削除するコマンドがありますか? –

5

多くのツールが正規表現でそれを行います。例えば、perlは場所にファイルを編集することができます。

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

を私はios::binaryが何であるかわからないんだけど、それはキーのように私には思えます。
Appleシステムに関連して聞こえ、LFではなくCR(^ M)文字を使用します(Windowsでは両方を使用します)。ですから、CR-LFではなくCRだけを持っていれば、dos2unixは動作しません。

なぜ、ios::binary(@ Joachim-Isakssonが示唆したように)を削除しないのはなぜですか?

+0

私が言ったように、私はすでにios :: binaryなしでそれを試してみました。そして状況を修正するかどうかを確認するために単純に入れました。それが原因ではありません。とにかくおかげで。 –

+0

バイナリモードでファイルを開くことを指定します:http://courses.cs.vt.edu/~cs2604/fall02/binio.html#open –

関連する問題