あまりにも計算機資源を浪費するバージョン

あまりにも計算機資源を浪費するバージョン

まあ、明日会社で答えだすか。

 #!/usr/bin/ruby -Ke
 require 'iconv'
 require 'base64'
 r=Hash.new
 ret=Hash.new
 fn=Hash.new(0)
 #hash変換
 STDIN.read.scan(/.+?^$\n/m){|record|
   name="no_data"
   rt=Hash.new("")
   record.split(/\n/).each{|field|
     n,v=field.split(/ /)
     if n=~/^dn:/ && v=~/(?:HEININTUBAN=([^,]+?),)?SHOKUINRIREKITUBAN=([^,]+?),/
       name="#{$2}#{"_"+$1 if $1!=nil}"
       v=name
     end
     n=$1 if /([^:;]+)/.match(n)
     v=Iconv.iconv("eucjp","utf8",decode64(v)) rescue v if n=="shokuinsimei"
     rt[n]=v
     fn[n]+=1
   }
   r[name]=rt
 }
 r.delete("no_data")
 #重複排除
 r.each{|field,value|
   f=/([^_]+)/.match(field)[1]
   if ret.key?(f)
     fn.keys.each{|key|
       if ret[f][key] == nil || ret[f][key] == ""
         ret[f][key]=value[key]
       elsif value[key] != nil && ret[f][key]!~/#{value[key]}/
         ret[f][key]="#{ret[f][key]},#{value[key]}"
       end
     }
   else
     ret[f]=value
   end
 }
 
 #出力
 puts %Q!"id","#{fn.keys.join('","')}"!
 ret.each{|rk,rv|
   print %Q!"#{rk}"!
   fn.keys.each{|key|
     print %Q!,"#{rv[key]}"!
   }
   puts ""
 }