私のUnix Rubyプログラムは、Windows上で実行されている SqlServerによって読み込まれるファイルを書き込む必要があります。私はこの ファイルに書き込む行が、のUNIX行の末尾ではなく、ではなく、\r\n
、DOS/Windows行の終わりで終わるファイルが必要です。私は を手動で\ rを各行の最後に追加しなくても、これが起こることを望みます。UNIXからのファイルへのDOS行末の書き込み方法
出発点
私のプログラムは次のようにファイルへの書き込みをした場合:
File.open("/tmp/foo", "w") do |file|
file.puts "stuff"
end
次に、ファイルはUnixの行末を持っている:
私のプログラムから、期待されている$ od -c foo
0000000 s t u f f \n
Unix上で動作しています。しかし、私は は、このファイル(とこのファイルのみ)がDOSの行末を持つ必要があります。私は手動で各ラインに\ rを追加した場合、各ライン手動
に\ rを追加
:
File.open("/tmp/foo", "w") do |file|
file.puts "stuff\r"
end
次に、ファイルがあるDOSの改行コード:
$ od -c /tmp/foo
0000000 s t u f f \r \n
この私が書いておきたい行ごとに繰り返さなければなりません。 this SO answerによって示されているように文字列#エンコード
を使用して
、私はそれを書き込む前に のString#エンコードを使用して文字列を変更できます。
File.open("/tmp/foo", "w") do |file|
file.puts "alpha\nbeta\n".encode(crlf_newline: true)
end
をこれはDOSの行末になり:
$ od -c /tmp/foo
0000000 a l p h a \r \n b e t a \r \n
これは、複数の行を一度に書くと、 #encodeを1回呼び出すと、すべてのその行の終わりを と書いてください。しかし、それは冗長であり、私はまだすべての書き込みに終わる という行を指定する必要があります。
私はむしろUnixのより終わるのWindows \r\n
ラインに にラインを終了するには、UNIXで開いているファイルに各puts
を引き起こす可能性がありますどのように「\ n」を 行が終わりますか?
Ruby 2.3.1を実行しています。このためのオプションがあります
ノートを書きます – Dennis