Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # This is a code snippet to analyse CSV file. This program has got functions to sort, filter by value of each column and availability of a row.
- # To run this program copy payroll.rb and payroll.csv to somewhere same place in your disc and just run it by ruby command.
- # $ ruby payroll.rb
- require 'csv'
- class Payroll
- # Indexes for columns
- COLUMN_NUM = 0
- COLUMN_NAME = 1
- COLUMN_BDAY = 2
- COLUMN_AVAILABLE = 3
- # Order of sort
- ASC = 0
- DESC = 1
- def initialize(filepath)
- @rows = []
- CSV.open(filepath, 'r', ',') { |row| @rows << row}
- end
- # show contents of a CSV file
- def show(only_available = false)
- puts '-------------------------------'
- @rows.each do |row|
- if only_available
- puts row.join('| ') if row[COLUMN_AVAILABLE] == "1"
- else
- puts row.join('| ')
- end
- end
- puts '-------------------------------'
- end
- def sort!(column = COLUMN_NUM, order = ASC)
- if order == ASC
- @rows.sort!{|a, b| a[column].to_i <=> b[column].to_i}
- else
- @rows.sort!{|a, b| b[column].to_i <=> a[column].to_i}
- end
- self
- end
- def filter!(keyword, column = COLUMN_NAME)
- if column == COLUMN_NAME
- @rows = @rows.select{|row| row[column] =~ /#{keyword}/ }
- else
- @rows = @rows.select{|row| row[column] == keyword }
- end
- self
- end
- end
- # a)Sort rows by specified column in Asc/Desc
- Payroll.new("payroll.csv").sort!(Payroll::COLUMN_NUM, Payroll::ASC).show
- Payroll.new("payroll.csv").sort!(Payroll::COLUMN_BDAY, Payroll::DESC).show(true)
- # b)Search row by specified column matching fully
- Payroll.new("payroll.csv").filter!("19821213", Payroll::COLUMN_BDAY).show
- Payroll.new("payroll.csv").filter!("鈴木 達矢", Payroll::COLUMN_NAME).show
- # c)Search row like a specified keyword
- # Search row(s) whose name column contains "e" and "i"
- Payroll.new("payroll.csv").filter!("e", Payroll::COLUMN_NAME).filter!("i", Payroll::COLUMN_NAME).show(true)
Add Comment
Please, Sign In to add comment