まつもと ゆきひろです
In message "[ruby-list:8845] mapping a tagged file onto a class"
on 98/07/24, Takao KAWAMURA <kawamura / ike.tottori-u.ac.jp> writes:
|各行にフィルード名と値が含まれ、レコードの区切りは空行という、
|よくあるタイプのテキストデータベースがありますよね。ええと、
|
|DATABASE : (RECORD "\n")*
|RECORD : (FIELD "\n")*
|FIELD : KEY "\t" VALUE
|
|でいいのかな? (KEY,VALUEは文字列)
えーと,shift reduce conflictになるんですけど.^^;;;
あ,「レコードの区切りは空行」だから
|DATABASE : (RECORD "\n\n")*
なのかな.
|こういうテキストデータベースを読んで、各レコードをインスタン
|スにし、各KEYをインスタンス変数にしたいのです。
どーしてもインスタンス変数にしたいですか? なんとなく,ハッ
シュに格納した方が自然な気がするんですが.それなら
def initialize(record)
@fields = {}
key = value = nil
record.each_line do |l|
l.chomp!
key,value = l.split("\t")
@fields[key] = value
end
end
なんて感じになると思うのですが.テストはしてませんのでイメー
ジとして捉えて欲しいのですが,これなら妙なevalは不要ですよね.
インスタンス変数にしちゃうとattrかevalを使わないとアクセスで
きませんから使い勝手が悪いと思います.
|それと、Perl版より倍遅いので輪郭をとってみようと思っているの
|ですが、そういうツールはありましたっけ?
輪郭って profile のことですよね.profilerはまだ作ってません.
デバッガと同じ仕組みをつかえばできるはずなんですけどね.
なお,仕事の内容によるのですが,残念ながら現状ではPerlをその
まま移植したコードが数割増しから2倍ってのは比較的典型的な速
度比です.
まつもと ゆきひろ /:|)