Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. require 'csv'
  2.  
  3. class OneW
  4. class Row
  5. attr_accessor :name, :filter;
  6.  
  7. def initialize(name, filter)
  8. @name = name
  9. @filter = filter
  10. end
  11. end
  12. end
  13.  
  14. def sjis_safe(str)
  15. return '' if str.nil?
  16. [
  17. ["301C", "FF5E"], # wave-dash
  18. ["2212", "FF0D"], # full-width minus
  19. ["00A2", "FFE0"], # cent as currency
  20. ["00A3", "FFE1"], # lb(pound) as currency
  21. ["00AC", "FFE2"], # not in boolean algebra
  22. ["2014", "2015"], # hyphen
  23. ["2016", "2225"], # double vertical lines
  24. ["FF0D", "2015"], # double vertical lines
  25. ].inject(str) do |s, (before, after)|
  26. s.gsub(
  27. before.to_i(16).chr('UTF-8'),
  28. after.to_i(16).chr('UTF-8')
  29. )
  30. end
  31. end
  32.  
  33. headers = [
  34. OneW::Row.new("姓", Proc.new {|row| row[:last_name]}),
  35. OneW::Row.new("名", Proc.new {|row| row[:first_name]}),
  36. OneW::Row.new("肩書き", Proc.new {|row| row[:position]}),
  37. OneW::Row.new("外字ファイル名", Proc.new {|row| ''}),
  38. OneW::Row.new("姓ふりがな", Proc.new {|row| ''}),
  39. OneW::Row.new("名ふりがな", Proc.new {|row| ''}),
  40. OneW::Row.new("敬称", Proc.new {|row| row[:honorific]}),
  41. OneW::Row.new("区分", Proc.new {|row| row[:side] == 'たく' ? '新郎側' : '新婦側'}),
  42. OneW::Row.new("〒", Proc.new {|row|
  43. md = row[:address]&.match(/〒(\d{3}-\d{4})[\s ]/)
  44. (md && md[1].gsub('-', '')) || nil
  45. }),
  46. OneW::Row.new("住所1", Proc.new {|row|
  47. md = row[:address]&.match(/〒(\d{3}-\d{4})[\s ](.+)/)
  48. (md && md[2]) || row[:address]
  49. }),
  50. OneW::Row.new("住所2", Proc.new {|row| ''}),
  51. OneW::Row.new("携帯電話番号", Proc.new {|row| ''}),
  52. OneW::Row.new("備考", Proc.new {|row| row[:remarks]}),
  53. OneW::Row.new("出欠状態", Proc.new {|row| '出席'}),
  54. OneW::Row.new("性別", Proc.new {|row| ''}),
  55. OneW::Row.new("PC Email", Proc.new {|row| ''}),
  56. OneW::Row.new("携帯 Email", Proc.new {|row| ''}),
  57. OneW::Row.new("電話番号", Proc.new {|row| ''}),
  58. OneW::Row.new("グループ", Proc.new {|row| ''}),
  59. OneW::Row.new("ふりがな表記", Proc.new {|row| ''}),
  60. OneW::Row.new("お子様の年齢", Proc.new {|row| ''}),
  61. OneW::Row.new("未成年", Proc.new {|row| ''})
  62. ]
  63.  
  64. file_out = File.new('./out.csv', 'w+')
  65.  
  66. file_out.puts(headers.map {|r| r.name}.join(',').encode('cp932'))
  67.  
  68. list = CSV.table('./attendance.csv');
  69.  
  70. list.select { |row|
  71. row[:reception] == 'TRUE'
  72. }.each { |row|
  73. file_out.puts(headers.map { |column|
  74. sjis_safe(column.filter.call(row)&.to_s).encode('cp932')
  75. }.join(','))
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement