Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'csv'
- class OneW
- class Row
- attr_accessor :name, :filter;
- def initialize(name, filter)
- @name = name
- @filter = filter
- end
- end
- end
- def sjis_safe(str)
- return '' if str.nil?
- [
- ["301C", "FF5E"], # wave-dash
- ["2212", "FF0D"], # full-width minus
- ["00A2", "FFE0"], # cent as currency
- ["00A3", "FFE1"], # lb(pound) as currency
- ["00AC", "FFE2"], # not in boolean algebra
- ["2014", "2015"], # hyphen
- ["2016", "2225"], # double vertical lines
- ["FF0D", "2015"], # double vertical lines
- ].inject(str) do |s, (before, after)|
- s.gsub(
- before.to_i(16).chr('UTF-8'),
- after.to_i(16).chr('UTF-8')
- )
- end
- end
- headers = [
- OneW::Row.new("姓", Proc.new {|row| row[:last_name]}),
- OneW::Row.new("名", Proc.new {|row| row[:first_name]}),
- OneW::Row.new("肩書き", Proc.new {|row| row[:position]}),
- OneW::Row.new("外字ファイル名", Proc.new {|row| ''}),
- OneW::Row.new("姓ふりがな", Proc.new {|row| ''}),
- OneW::Row.new("名ふりがな", Proc.new {|row| ''}),
- OneW::Row.new("敬称", Proc.new {|row| row[:honorific]}),
- OneW::Row.new("区分", Proc.new {|row| row[:side] == 'たく' ? '新郎側' : '新婦側'}),
- OneW::Row.new("〒", Proc.new {|row|
- md = row[:address]&.match(/〒(\d{3}-\d{4})[\s ]/)
- (md && md[1].gsub('-', '')) || nil
- }),
- OneW::Row.new("住所1", Proc.new {|row|
- md = row[:address]&.match(/〒(\d{3}-\d{4})[\s ](.+)/)
- (md && md[2]) || row[:address]
- }),
- OneW::Row.new("住所2", Proc.new {|row| ''}),
- OneW::Row.new("携帯電話番号", Proc.new {|row| ''}),
- OneW::Row.new("備考", Proc.new {|row| row[:remarks]}),
- OneW::Row.new("出欠状態", Proc.new {|row| '出席'}),
- OneW::Row.new("性別", Proc.new {|row| ''}),
- OneW::Row.new("PC Email", Proc.new {|row| ''}),
- OneW::Row.new("携帯 Email", Proc.new {|row| ''}),
- OneW::Row.new("電話番号", Proc.new {|row| ''}),
- OneW::Row.new("グループ", Proc.new {|row| ''}),
- OneW::Row.new("ふりがな表記", Proc.new {|row| ''}),
- OneW::Row.new("お子様の年齢", Proc.new {|row| ''}),
- OneW::Row.new("未成年", Proc.new {|row| ''})
- ]
- file_out = File.new('./out.csv', 'w+')
- file_out.puts(headers.map {|r| r.name}.join(',').encode('cp932'))
- list = CSV.table('./attendance.csv');
- list.select { |row|
- row[:reception] == 'TRUE'
- }.each { |row|
- file_out.puts(headers.map { |column|
- sjis_safe(column.filter.call(row)&.to_s).encode('cp932')
- }.join(','))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement