diff options
author | Guillermo Ramos | 2012-04-01 16:49:59 +0200 |
---|---|---|
committer | Guillermo Ramos | 2012-04-01 16:50:09 +0200 |
commit | 4bbf0d67dbc7d80cb1a6f4e096263f4e1cf77878 (patch) | |
tree | 17fdeb4b296aee607fcb60b149edd3237a58e4de /ruby/csv.rb | |
parent | d5fc25cac083e63c88a830bdcf7359f8a1dac643 (diff) | |
download | 7l-4bbf0d67dbc7d80cb1a6f4e096263f4e1cf77878.tar.gz |
[Ruby] Día 3
Diffstat (limited to 'ruby/csv.rb')
-rwxr-xr-x | ruby/csv.rb | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/ruby/csv.rb b/ruby/csv.rb new file mode 100755 index 0000000..c48a11a --- /dev/null +++ b/ruby/csv.rb @@ -0,0 +1,62 @@ +#!/usr/bin/env ruby + + +module Csv + class CsvRow + def initialize keys, values + @content = Hash[] + keys.each do |k| + @content[k] = values[keys.index(k)] + end + end + + def method_missing name, *args + @content[name.to_s] + end + end + + def self.included(base) + base.extend ClassMethods + end + + module ClassMethods + def acts_as_csv + include InstanceMethods + end + end + + module InstanceMethods + attr_accessor :headers, :csv_contents + + def initialize + read + end + + def read + @csv_contents = [] + filename = self.class.to_s.downcase + '.txt' + file = File.new(filename) + @headers = file.gets.chomp.split(',') + + file.each do |row| + @csv_contents << row.chomp.split(',') + end + end + + def each + @csv_contents.each {|line| yield CsvRow.new(@headers, line)} + end + end +end + +class MyCsv + include Csv + acts_as_csv +end + +csv = MyCsv.new +csv.each {|row| puts row.one} +puts +csv.each {|row| puts row.two} +puts +csv.each {|row| puts row.three} |