compact!とcompact
Array#compactは、selfからnilを取り除くメソッドです。
しかし、「!」がない場合は、selfは変更されません。
Array#compact!によって、selfは変更されます。
>> a = [1] => [1] >> a[7] = 77 => 77 >> a.compact >> p a [1, nil, nil, nil, nil, nil, nil, 77] => [1, nil, nil, nil, nil, nil, nil, 77] >> a.compact! => [1, 77]
IO.writeメソッド
プログラムの外部とデータをやり取りするための機能として入力(Input)と出力(Output)を使えるようにしてくれるのがIOクラスです。
IO.writeメソッドは、Fileオブジェクトを作らずにdateにデータを書き込みます。
dateの書き込みを行った後はファイル閉じます。
offsetを省略した場合は、fileの内容をすべてdateに置き換えます。
# readme.md
IO.write("readme.md", "Ruby\nExamination\n")
実行。
ruby IO.write.rb
# readme.md Ruby Examination
offsetを指定した場合は、先頭からoffsetバイト以降に書き込み、その後のデータは元のまま残ります。
IO.write("readme.md", "★",16)
Ruby Examination★
IO.readlinesメソッド
io.readline(rs)はIOオブジェクト(io)からデータを1行読み込みます。
区切りは引数rsで指定した文字列になります。
引数を省略した場合は、組み込み変数(デフォルトでは"\n")が行の区切りになります。
IO.openメソッド
io = File.open(file[, mode[, perm][, opt])
io = open(file[, mode[, perm][, opt])
IO.openメソッドはファイルを開いて新しいFileオブジェクトを得るのに使います。
modeにはどのような目的でファイルを開くかを指定します。
modeを省略した場合は、読み込み専用"r"となります。
mode
"r" : 読み込み専用
"r+": 読み込み/書き込み用
"w": 書き込み専用。ファイルがなければ新たに作成する。既に存在する場合はファイルの内容を空にします。
"w+": 読み込み/書き込み用。ほかは"w"と同じ。
"a": 追加書き込み専用でファイルを開く。ファイルがなければ新たに作成する。
"a+":読み込み/追加書き込み用。ファイルがなければ新たに作成します。出力は 常に ファイルの末尾に追加されます。
# textfile.txt recode 1 recode 2 recode 3
f.rewindは、ファイルポインタをファイルの先頭に移動するメソッドです。
modeで"r+"を指定してみます。
# io_open.rb open('textfile.txt', "r+") do |f| data = f.read.upcase f.rewind f.puts data end
実行。
ruby io_open.rb
# textfile.txt RECODE 1 RECODE 2 RECODE 3
"w"を指定すると、f.readでエラーがおきます。
open('textfile.txt', "w") do |f| data = f.read.upcase f.rewind f.puts data end io_open.rb:2:in `read': not opened for reading (IOError) from io_open.rb:2:in `block in <main>' from io_open.rb:1:in `open' from io_open.rb:1:in `<main>'
"w+"を指定した場合。
open('textfile.txt', "w+") do |f| data = f.read.upcase f.rewind f.puts data end #textfile.txt
"a+"を指定した場合。
open('textfile.txt', "a+") do |f| data = f.read.upcase f.rewind f.puts data end # textfile.txt recode 1 recode 2 recode 3 RECODE 1 RECODE 2 RECODE 3\
参照:module function Kernel.#open