01  =begin
02  
03  lineno.rb:
04  
05  テキストファイルを読み込んで,各行の先頭に行番号を付加して
06  指定されたファイルに書き込む.
07  
08  =end
09  
10  # 引数の個数チェック -> 足りない場合は終了
11  if ARGV.size < 2
12    STDERR.print "#{File.basename($0)} inputfile outputfile\n"
13    exit(1)
14  end
15  
16  infile=ARGV.shift  # 入力ファイル名
17  outfile=ARGV.shift # 出力ファイル名
18  
19  # 入力ファイルから1行ずつ読みこんで配列に取り込む
20  in_lines = []
21  File.open(infile,"r") do |fin|
22    while line = fin.gets
23      in_lines.push(line)
24    end
25  end
26  
27  n = in_lines.size # 行数
28  d = Math.log10(n).floor + 1 # nの10進数での桁数
29  fmt = "%0#{d}d %s" # d桁の数字を付加する出力書式
30  
31  # ファイルへの出力
32  File.open(outfile,"w") do |fout|
33    in_lines.each_with_index do |line,j|
34      fout.puts fmt % [j+1,line]
35    end
36  end