cat -nもどき
何となくcat -nもどきを作ってしまったので投棄。2パスにして行頭の余分なスペースをなくしてみた(賛否両論あるだろうなー、この仕様は)。
#!/usr/bin/env ruby # -*- ruby -*- # $Id: catn,v 1.1 2005/03/27 12:34:04 s-tanaka Exp $ # # usage: catn [files ...] # def get_ncolumn(file) while file.gets end Math.log10(file.lineno).to_i + 1 end def ncat(ncolumn, file) while line = file.gets printf("%*d %s", ncolumn, file.lineno, line) end end ARGV.each do |filename| open(filename, 'r') do |file| ncolumn = get_ncolumn(file) file.pos = 0 file.lineno = 0 ncat(ncolumn, file) end end
printfの"%*d"は珍し気だな。printf(3)より該当部分をコピーしとく。
A field width or precision, or both, may be indicated by an asterisk `*' instead of a digit string. In this case, an int argument supplies the field width or precision. A negative field width is treated as a left adjustment flag followed by a positive field width; a negative precision is treated as though it were missing.
このツールは、主にこの日記のソースコード貼り付け時に使用する予定。
しかしRubyは楽だ。こんなツールをDynamic Language以外で実装しようなんて、まず思わないな(もちろん、お仕事を除いて)。