Guest User

Untitled

a guest
May 25th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. # 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.
  2. # To run this program copy payroll.rb and payroll.csv to somewhere same place in your disc and just run it by ruby command.
  3. # $ ruby payroll.rb
  4.  
  5. require 'csv'
  6.  
  7. class Payroll
  8. # Indexes for columns
  9. COLUMN_NUM = 0
  10. COLUMN_NAME = 1
  11. COLUMN_BDAY = 2
  12. COLUMN_AVAILABLE = 3
  13.  
  14. # Order of sort
  15. ASC = 0
  16. DESC = 1
  17.  
  18. def initialize(filepath)
  19. @rows = []
  20. CSV.open(filepath, 'r', ',') { |row| @rows << row}
  21. end
  22.  
  23. # show contents of a CSV file
  24. def show(only_available = false)
  25. puts '-------------------------------'
  26. @rows.each do |row|
  27. if only_available
  28. puts row.join('| ') if row[COLUMN_AVAILABLE] == "1"
  29. else
  30. puts row.join('| ')
  31. end
  32. end
  33. puts '-------------------------------'
  34. end
  35.  
  36. def sort!(column = COLUMN_NUM, order = ASC)
  37. if order == ASC
  38. @rows.sort!{|a, b| a[column].to_i <=> b[column].to_i}
  39. else
  40. @rows.sort!{|a, b| b[column].to_i <=> a[column].to_i}
  41. end
  42. self
  43. end
  44.  
  45. def filter!(keyword, column = COLUMN_NAME)
  46. if column == COLUMN_NAME
  47. @rows = @rows.select{|row| row[column] =~ /#{keyword}/ }
  48. else
  49. @rows = @rows.select{|row| row[column] == keyword }
  50. end
  51. self
  52. end
  53. end
  54.  
  55. # a)Sort rows by specified column in Asc/Desc
  56. Payroll.new("payroll.csv").sort!(Payroll::COLUMN_NUM, Payroll::ASC).show
  57. Payroll.new("payroll.csv").sort!(Payroll::COLUMN_BDAY, Payroll::DESC).show(true)
  58.  
  59. # b)Search row by specified column matching fully
  60. Payroll.new("payroll.csv").filter!("19821213", Payroll::COLUMN_BDAY).show
  61. Payroll.new("payroll.csv").filter!("鈴木 達矢", Payroll::COLUMN_NAME).show
  62.  
  63. # c)Search row like a specified keyword
  64. # Search row(s) whose name column contains "e" and "i"
  65. Payroll.new("payroll.csv").filter!("e", Payroll::COLUMN_NAME).filter!("i", Payroll::COLUMN_NAME).show(true)
Add Comment
Please, Sign In to add comment