質問
私はRubyで文字列を持っている、標準の行末(s
、\n
、\r\n
)のいずれかを持っているかもしれません\r
(例えば)。私は\n
sにそれらのすべてを変換したいです。最良の方法は何でしょうか。
この超共通の問題のように思えるが、それについて多くのドキュメントはありません。もちろん簡単な粗製のソリューションがありますが、これを処理することで構築されたものはありますか?
エレガント、慣用-Rubyのソリューションが最適です。の
EDIT:^M
と\r
が同じであることに気づきました。しかし、まだ3例があります。 (ウィキペディアのを参照してください。)
解決
ベストはちょうどあなたがあまりにも巧妙な取得しようと、具体的ではない変更する2例を処理することです。
s.gsub /\r\n?/, "\n"
他のヒント
ルビー1.9以来、あなたは String::encode
そのままあなたのエンコーディングを維持しながらuniversal_newline: true
にあなたの新しい行のすべてを取得する\n
付きます:
s.encode(s.encoding, universal_newline: true)
一度知られている改行状態で、あなたは自由に:crlf_newline
を使用してバックCRLFに変換することができます。例えば:CRLF
(例えば)に終了(おそらく混合)、未知のファイルを変換するには、バイナリモードでそれを読んで、その後ます:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
私はきれいな解決策は、正規表現を使用することだと思います:
s.gsub! /\r\n?/, "\n"
のNetBeans IDE上でそれらを開いてみてください - 私は行末を修正したい場合は、そのは、私が他の場所から開かれてきたプロジェクトの一つに、前に私に尋ねました。私もそれを行うためのメニューオプションがあるかもしれないと思うが、それは私がしようとするだろう最初のものになります。
所属していません StackOverflow