catとhead
UchのX40記: [Ruby]catとheadより.
catは,正直言いまして,簡単な解答*1ならアレでよい気がする.そして,catよりはheadの方が面白そう.
headは,折角だからオプション指定とかできるようにした.
def usage STDERR.print("usage: #{$0} [-c N] [-n N] [file...]\n" + "-c N : print first N bytes\n" + "-n N : print first N lines\n" + "-v : print filename\n") exit 1 end opt_byte = false opt_line = false opt_name = false bytes = nil lines = nil # ここで先にデフォルトを指定しておくのもアリよね # オプションを取る while ARGV[0] =~ /^-/ $_ = ARGV.shift if $_ =~ /^-c$/ opt_byte = true if ARGV[0] =~ /^\d+$/ bytes = ARGV.shift.to_i else usage end elsif $_ =~ /^-n$/ opt_line = true if ARGV[0] =~ /^\d+$/ lines = ARGV.shift.to_i else usage end elsif $_ =~ /^-v$/ opt_name = true end end lines = 10 unless opt_line while filename = ARGV.shift f = open(filename) puts "--[" + filename + "]--" if opt_name unless opt_byte lines.times do if l = f.gets then print l else break end end else tmp = bytes chars = f.gets(nil).split(//) chars.each do |char| break if bytes < 1 bytes -= 1 print char end puts bytes = tmp end f.close end
もっといいのあったら、教えて頂戴。
良くはないよね:p
何はともあれ,実行して見るとこんな感じになります.
$ ruby head.rb -v -c 3 head.rb --[head.rb]-- def $ ruby head.rb -v -n 3 head.rb --[head.rb]-- def usage STDERR.print("usage: #{$0} [-c N] [-n N] [file...]\n" + "-c N : print first N bytes\n" + $ ruby head.rb -v -n head.rb usage: head.rb [-c N] [-n N] [file...] -c N : print first N bytes -n N : print first N lines -v : print filename
オプション指定は正直言って自己満足の世界だと思う.
*1:オプション云々を抜きにして