ファイルの先頭10行を表示
$ ./head.rb hoge foo bar ...
# ファイルを開く file = File.open 'hoge.txt' # 一行読み込む file.readline # ファイルを閉じる file.close
# 0から10まで繰り返す
0.upto(10){|n| ... }
# 0,2,4..と繰り返す
0.step(10,2){|n| ... }
# 10回繰り返す
10.times{ ... }
file = File.open ARGV[0]
10.times{
print file.readline
}
file.close
関数型言語使いにはうれしい
[1,2,3,4,5].map{|x| x*2} => [2,4,..,10]
[1,2,3,4,5].select{|x| x % 2 == 0 } => [2,4]
[1,2,3,4,5].inject(1){|x,y| x*y } => 120
さっきのheadは例外に弱い
file = File.open ARGV[0] <ここで例外が起きたらやばい> file.close
file = File.open ARGV[0] begin ... ensure file.close end
File.open(ARGV[0]) {|file|
...
}
File.open(ARGV[0]){|file|
10.times{
print file.readline
}
}
stack = [] stack.push 10 stack.push 20 stack.pop => 20 stack.pop => 10
末尾からアクセスする
ary = [1,2,3,4,5] # ary[ary.size-1]と等価 ary[-1] => 5
配列の一部を取り出す
ary = [1,2,2,3,4,5] # 1番目から3番目までを取り出す ary[1..3] => [2,3,4] # 0番目から3つ取り出す ary[0,3] => [0,1,2]
ファイルの内容を配列で取得する
File.open('hoge.txt'){|file|
file.readlines => ["a\n", "b\n", ... ]
}
File.open(ARGV[0]){|file|
print file.readlines[0,10]
}
def main(file)
...
end
unless ARGV.empty? then
ARGV.each{|path|
File.open(path){|file|
main file
}
}
else
main STDIN
end
def main(file) ... end main ARGF
print ARGF.readlines[0,10]
もうワンライナーで十分
$ ruby -e 'print $<.readlines[0,10]' hoge.txt