Ruby(書き込み)

読み込みはこんな感じでした。

takk@deb9:~$ cat read.rb
f=open("in.txt")
print f.gets
f.close()
takk@deb9:~$ ruby read.rb
HELLO
takk@deb9:~$

書き込みは読み込みの反対なのだから、もしかしてputs使うだけでは? と思い、やってみるとエラーになります。

takk@deb9:~$ cat write.rb
f=open("out.txt")
f.puts("HELLO")
f.close()
takk@deb9:~$ ruby write.rb
write-ng.rb:2:in `write': not opened for writing (IOError)
        from write-ng.rb:2:in `puts'
        from write-ng.rb:2:in `<main>'
takk@deb9:~$

読み込みの時は省略していましたが、書き込みモードを指定する必要があります。第2引数に”w”を指定します。

takk@deb9:~$ cat write.rb
f=open("out.txt","w")
f.puts("AAA")
f.close()
takk@deb9:~$ 

実行してみます。

takk@deb9:~$ ruby write.rb
takk@deb9:~$ cat out.txt
AAA
takk@deb9:~$

out.txtが新規作成されて、内容が書き込まれているようです。

openはFile.openでもよいです。

takk@deb9:~$ cat write.rb
f=File.open("out.txt","w")
f.puts("BBB")
f.close()
takk@deb9:~$ ruby write.rb
takk@deb9:~$ cat out.txt
BBB
takk@deb9:~$

openを使わずに一発で全行書き込むにはFile.writeを使います。

takk@deb9:~$ cat write-all.rb
File.write("out.txt","HELLO\nHELLO\n")
takk@deb9:~$ ruby write-all.rb
takk@deb9:~$ cat out.txt
HELLO
HELLO
takk@deb9:~$

配列の内容を書き込む場合は、ちょっと一工夫いりそうです。

takk@deb9:~$ cat write-all.rb
arr = %w(aaa bbb ccc ddd eee)
arr.push("")
File.write("out.txt",arr.join("\n"))
takk@deb9:~$ ruby write-all.rb
takk@deb9:~$ cat out.txt
aaa
bbb
ccc
ddd
eee
takk@deb9:~$

コメント

タイトルとURLをコピーしました