Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DataRecord
- def self.make(file_name,delimiter,header_on = true,ext = nil,*fixed_args)
- if delimiter == 'fixed'
- @@fixed_args = fixed_args
- else
- @@fixed_args = nil
- end
- @@delimiter = delimiter
- @@header_on = header_on
- if ext
- @@ext = ext
- else
- @@ext = '.txt'
- end
- data = File.new(file_name)
- header = data.gets.chomp
- data.close
- class_name = File.basename(file_name,".*").capitalize
- klass = Object.const_set(class_name,Class.new)
- if header_on
- names = header.split(delimiter)
- else
- if delimiter == 'fixed'
- temp = []
- last = 1
- fixed_args.each{|fixed|
- temp.push(header.slice!(0...fixed-last))
- last = fixed
- }
- names = []
- temp.each_with_index{|h,i| names.push 'field' + (i+1).to_s}
- else
- names = []
- temp = header.split(delimiter).each_with_index{|h,i| names.push 'field' + (i+1).to_s}
- end
- end
- klass.class_eval{
- attr_accessor :arr,*names
- define_method(:initialize){|*values|
- instance_variable_set("@del",delimiter)
- names.each_with_index{|name,i|
- instance_variable_set("@"+name, values[i])
- }
- }
- define_method(:to_s) do
- str = "<#{self.class}:"
- names.each {|name| str << "\t#{name}=#{self.send(name)}" }
- str + ">"
- end
- alias_method :inspect, :to_s
- define_method(:to_a){
- arr = []
- names.each{|name| arr.push(self.send(name))}
- arr
- }
- define_method(:to_h){
- hash = {}
- names.each{|key| hash[key] = self.send(key)}
- hash
- }
- }
- def klass.read
- if @@fixed_args
- puts 'fixed'
- array = []
- data = File.new(self.to_s.downcase + @@ext)
- if @@header_on
- data.gets # throw away header
- end
- values = []
- data.each{|line|
- last = 1
- @@fixed_args.each{|fixed|
- values.push(line.slice!(0...fixed-last).strip)
- last = fixed
- }
- puts values
- array << self.new(*values)
- values = []
- }
- data.close
- array
- else
- array = []
- data = File.new(self.to_s.downcase + @@ext)
- if @@header_on
- data.gets # throw away header
- end
- data.each{|line|
- line.chomp!
- values = line.split(@@delimiter)
- array << self.new(*values)
- }
- data.close
- array
- end
- end
- klass
- end
- end
Add Comment
Please, Sign In to add comment