Guest User

Untitled

a guest
Apr 20th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.86 KB | None | 0 0
  1. class DataRecord
  2.  
  3. def self.make(file_name,delimiter,header_on = true,ext = nil,*fixed_args)
  4.  
  5. if delimiter == 'fixed'
  6.  
  7. @@fixed_args = fixed_args
  8.  
  9. else
  10.  
  11. @@fixed_args = nil
  12.  
  13. end
  14.  
  15.  
  16.  
  17. @@delimiter = delimiter
  18.  
  19. @@header_on = header_on
  20.  
  21. if ext
  22.  
  23. @@ext = ext
  24.  
  25. else
  26.  
  27. @@ext = '.txt'
  28.  
  29. end
  30.  
  31. data = File.new(file_name)
  32.  
  33. header = data.gets.chomp
  34.  
  35. data.close
  36.  
  37. class_name = File.basename(file_name,".*").capitalize
  38.  
  39. klass = Object.const_set(class_name,Class.new)
  40.  
  41. if header_on
  42.  
  43. names = header.split(delimiter)
  44.  
  45. else
  46.  
  47. if delimiter == 'fixed'
  48.  
  49. temp = []
  50.  
  51. last = 1
  52.  
  53. fixed_args.each{|fixed|
  54.  
  55. temp.push(header.slice!(0...fixed-last))
  56.  
  57. last = fixed
  58.  
  59. }
  60.  
  61. names = []
  62.  
  63. temp.each_with_index{|h,i| names.push 'field' + (i+1).to_s}
  64.  
  65. else
  66.  
  67. names = []
  68.  
  69. temp = header.split(delimiter).each_with_index{|h,i| names.push 'field' + (i+1).to_s}
  70.  
  71. end
  72.  
  73. end
  74.  
  75. klass.class_eval{
  76.  
  77. attr_accessor :arr,*names
  78.  
  79. define_method(:initialize){|*values|
  80.  
  81. instance_variable_set("@del",delimiter)
  82.  
  83. names.each_with_index{|name,i|
  84.  
  85. instance_variable_set("@"+name, values[i])
  86.  
  87. }
  88.  
  89. }
  90.  
  91. define_method(:to_s) do
  92.  
  93. str = "<#{self.class}:"
  94.  
  95. names.each {|name| str << "\t#{name}=#{self.send(name)}" }
  96.  
  97. str + ">"
  98.  
  99. end
  100.  
  101. alias_method :inspect, :to_s
  102.  
  103.  
  104.  
  105. define_method(:to_a){
  106.  
  107. arr = []
  108.  
  109. names.each{|name| arr.push(self.send(name))}
  110.  
  111. arr
  112.  
  113. }
  114.  
  115.  
  116.  
  117. define_method(:to_h){
  118.  
  119. hash = {}
  120.  
  121. names.each{|key| hash[key] = self.send(key)}
  122.  
  123. hash
  124.  
  125. }
  126.  
  127.  
  128.  
  129. }
  130.  
  131.  
  132.  
  133. def klass.read
  134.  
  135. if @@fixed_args
  136.  
  137. puts 'fixed'
  138.  
  139. array = []
  140.  
  141. data = File.new(self.to_s.downcase + @@ext)
  142.  
  143. if @@header_on
  144.  
  145. data.gets # throw away header
  146.  
  147. end
  148.  
  149. values = []
  150.  
  151. data.each{|line|
  152.  
  153. last = 1
  154.  
  155. @@fixed_args.each{|fixed|
  156.  
  157. values.push(line.slice!(0...fixed-last).strip)
  158.  
  159. last = fixed
  160.  
  161. }
  162.  
  163. puts values
  164.  
  165. array << self.new(*values)
  166.  
  167. values = []
  168.  
  169. }
  170.  
  171. data.close
  172.  
  173. array
  174.  
  175. else
  176.  
  177. array = []
  178.  
  179. data = File.new(self.to_s.downcase + @@ext)
  180.  
  181. if @@header_on
  182.  
  183. data.gets # throw away header
  184.  
  185. end
  186.  
  187. data.each{|line|
  188.  
  189. line.chomp!
  190.  
  191. values = line.split(@@delimiter)
  192.  
  193. array << self.new(*values)
  194.  
  195. }
  196.  
  197. data.close
  198.  
  199. array
  200.  
  201. end
  202.  
  203. end
  204.  
  205. klass
  206.  
  207. end
  208.  
  209. end
Add Comment
Please, Sign In to add comment