#!/usr/bin/ruby -Ks
class Csv
include Enumerable
def initialize(filename)
raise if !File.exist?(filename) # 初期化
@key,@line =[],[] # body
File.open(filename){|file|
@key=csv_split(file.gets.gsub!(/\n|\r/,'')) # key
node=Hash.new
while file.gets
line=csv_split($_.gsub(/\n|\r/,''))
@key.each_index{|index|
node[@key[index]]=line[index]
}
@line.push(node)
end
}
end
def csv_split(src) # csvの一列を配列に変換する
csv=[]
src+=','
src.scan(/(([^",][^,]*|)|"(([^"]|"")*)"),/) {|match,m1,m2,*rests|
if m2
csv.push(m2.gsub(/""/,'"'))
else
csv.push(m1)
end
}
p csv
csv
end
def keys
@key
end
def [](num)
@line[num]
end
def each
@line.each{|i|
yield(i)
}
end
def to_s
ret=@key.join(',')+"\n"
@line.map{|i|
a=""
@key.each_index{|j|
a+=i[@key[j]]+','
}
a.sub!(/,$/,"\n")
ret+=a
}
ret
end
end
if __FILE__==$0# ライブラリテスト用コード
a=Csv.new("./testdata.csv")
puts a
end
*[ruby/LDAP] インストール
>||
apt-get install libldap-ruby