rubyで化学式の続き


括弧付きの化学式の処理
scanはこれまであまり使ったことが無いmethodだったが、なかなか便利そうである。これを使えば、括弧付きの化学式を簡単に扱えるのではと思って、scriptを書いてみた。

def bracket(fml)
  while fml=~/^(.*)\(([^\)]*)\)([\d\.]*)(.*)$/
    head=$1
    inside=$2
    number=$3.to_f
    tail=$4
    inside.scan((/([A-Z][a-z]?)([\d\.]*)/)){|s|
      s[1]=1 if s[1]==""
      head+=s[0]+(s[1].to_f*number).to_s
      }
    fml=head+tail
  end
  fml
end

括弧の中を、その後に続く数倍して、括弧を取り除くことができる。これを式量計算のスクリプトで処理すれば、括弧付きの化学式でも、式量を計算できることになる。