# -*- coding utf-8 -*- require 'pp' require 'yaml' require 'csv' require 'ykutils/treemanagera' if RUBY_VERSION >= "1.8.7" require 'ykutils/nkfutil19' else require 'ykutils/nkfutil' end require 'ykutils/debugutils' module Ykutils module SpecFileOp include DebugUtils include NKFUTIL def valid? @valid end def open_for_write( fname ) begin fileobj = File.open( fname , "w") rescue => ex pp ex pp ex.backtrace @valid = false end fileobj end def dump_yaml_fileobj( obj , fileobj ) begin YAML.dump( obj , fileobj) rescue => ex pp ex pp ex.backtrace @valid = false end end def save_yaml_file( obj , fname ) begin File.open( fname , "w"){ |fileobj| YAML.dump( obj , fileobj ) } rescue => ex pp ex pp ex.backtrace @valid = false end end def load_yaml_file( fname ) @data = nil begin @data = YAML.load_file(fname) rescue => ex pp ex pp ex.backtrace @valid = false end @data end def parse_yaml_file( fname ) begin @data = YAML.parse( File.read(fname) ) rescue => ex pp ex pp ex.backtrace @valid = false end @data end def expand_data( data , separator , except_ary = [] ) tm = TreeManager.new re = Regexp.new( separator + "([^#{separator[0,1]}]+)" + separator ) data.each do |k,v| next unless v v.scan(re).flatten.each do |it| if it tm.add( it , k ) tm.addTag( k , it ) else tm.add( nil , k ) end end end tm.tsort.reverse.each do |k| next unless data[k] tag = tm.getTag(k) if tag i=0 tag.each do |it| ntag = Regexp.new( separator + it + separator ) if data[it] data[k] = data[k].sub( ntag , data[it] ) end end end end data.each do |k,v| next unless v ary = v.scan(re).flatten i = 0 if ary and ary.size > 0 except_ary.each do |it| unless ary.index(it) i += 1 end end end if i > 0 puts "#{k} fails to exapnd data. value is #{v}" @valid = false end end data end def make_data_complement(item_ary, data , common ) item_ary.each do |it| unless data[it] and data[it].strip != "" data[it] = common[it] end end end def check_data_complement( item_ary , data ) mes_ary = [] item_ary.each do |k| unless @data[k] mes_ary << "Specify #{k} " @valid = false end end mes_ary end def check_data_complement_print_message( item_ary , data ) mes_ary = check_data_complement( item_ary , data ) mes_ary.each do |mes| puts mes end end def load_csv_file( fname ) ary = [] begin CSV.open( fname , 'r') do |row| next unless row ary << row[0] end rescue => ex pp ex pp ex.backtrace @valid = false end ary end def load_csv_file_ex( fname ) ary = [] begin CSV.open( fname , 'r') do |row| next unless row ary.concat( row ) end rescue => ex pp ex pp ex.backtrace @valid = false end ary end def load_plain_text_file( fname ) ary = [] begin ary0 = File.readlines(fname) senc = NKFUTIL.auto_config_to_inner( ary0.join ) ary = ary0.select{ |x| x != nil }.collect{ |x| if x != nil then NKFUTIL.convert( x ) else "" end } rescue => ex pp ex pp ex.backtrace @valid = false ary = [] end ary end end end