あまりにも計算機資源を浪費するバージョン
あまりにも計算機資源を浪費するバージョン
まあ、明日会社で答えだすか。
#!/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 "" }