34

私は Ruby でs(たとえば) 標準の行末 ( \n, \r\n, \r) のいずれかを持つ可能性のある文字列を持っています。それらをすべてsに変換したい\n。最善の方法は何ですか?

これは非常に一般的な問題のように思えますが、それに関するドキュメントはあまりありません。明らかに簡単な大まかな解決策がありますが、これを処理するために組み込まれているものはありますか?

エレガントで慣用的な Ruby ソリューションが最適です。

^M編集:と\rは同じであることに気付きました。しかし、まだ3つのケースがあります。(ウィキペディアを参照してください。)

4

4 に答える 4

43

ruby 1.9 以降、 with を使用String::encodeして、エンコーディングを変更せずuniversal_newline: trueにすべての新しい行を取得できます。\n

s.encode(s.encoding, universal_newline: true)

既知の改行状態になったら、を使用して自由に CRLF に戻すことができます:crlf_newline。例: 末尾が不明な (混在している可能性がある) ファイルをCRLF(たとえば) に変換するには、バイナリ モードで読み取り、次のようにします。

s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
于 2014-01-08T00:04:51.273 に答える
41

具体的に変更したい 2 つのケースを処理するのが最善であり、巧妙になりすぎないようにすることをお勧めします。

s.gsub /\r\n?/, "\n"
于 2009-12-02T22:00:35.933 に答える
4

最もクリーンな解決策は、正規表現を使用することだと思います。

s.gsub! /\r\n?/, "\n"
于 2009-12-02T21:58:31.003 に答える
-9

それらを NetBeans IDE で開いてみてください - 以前、他の場所から開いたプロジェクトの 1 つで、行末を修正したいかどうか尋ねられました。それを行うためのメニューオプションもあるかもしれないと思いますが、それは私が最初に試すことです.

于 2009-12-02T21:51:43.860 に答える