人気ブログランキング | 話題のタグを見る

readline つき easydb.rb

easydb.rb をテストするとき、結構タイポが多くて、最初から打ち直すのが面倒だったので、readline を導入した。ファイル名の補完がタブでできるし、タイポでエラーがでたとき元の入力をコントロール+Pで呼び出すことができる。

ちょっとデータをいじってみるというようなお気軽な用途のためにつくったので、これ以上の改変は考えていない。著作権はRubyに準じる。

(テーブルをフォーマットするのにフォーマットの文を eval しているので、format のパースをしないとちょっと危ないが、自己責任で使ってください。)

ファイル名: easydb.rb (eval は半角英数に直して使用)

require 'readline'
include Readline

class Array
  def dump(label)
    format = 'print ' +
      label.split(/ /).collect{|x| 'x[:'+x+']'}.join('," ",') + ', "\n"'
    puts label
    self.each{|x| eval format}
  end
end

def read(path)
  data = IO.read(path).split(/\n/)
  format = data.shift
  label = data.shift
  raise 'format error' if format =~ /system|open/
  return data.collect{|x| x.split(/,/)}.collect{|x| eval format},
    label
end

def ml
  prog = ""
  while true
    line = readline('lines*> ', true)
    break if line == ";"
    prog << line + "\n"
  end
  return prog
end

loop do
  begin
    line = readline('easydb> ', true)
    if line == ";"
      then line = ml
    end
    evall(line, TOPLEVEL_BINDING)
  rescue SyntaxError, LoadError, StandardError
    STDERR.puts "Warning: #$!"
  end
end
by tnomura9 | 2008-09-15 10:14 | Ruby | Comments(0)
<< easydb の syntax... easydb.rb で成績処理 >>