def fmlwt(fml) # awt=Hash[*IO.read("formula.dat").strip.split(/\s+/m)] awt=Hash[*open("formula.dat"){|f| f.read}.strip.split(/\s+/m)] r=0 fml.scan(/(\[.*?\]|\(.*?\)|[A-Z][a-z]?)([\d\.]*)/){|a,n| n=1 if n=="" a=a.sub(/^[\[\(]/){""}.sub(/[\]\)]$/){""} r+=((a=~/^[A-Z][a-z]?$/)?awt[a].to_f : fmlwt(a))*n.to_f } r end