Пока вопрос не имеет достаточного смысла, поэтому я ожидаю, что он будет закрыт в конце концов. Вот некоторая информация о том, как разделить поля так, чтобы возможно , мы могли получить реальную root проблемы.
Размышлять об этом:
ary = <<EOT
full_name | phone_number |
Mike Smith | (123)-456-7890|
Tony Davis | (213)-564-7890|
EOT
PIPE_DELIMITER = /\s*\|\s*/
munged_data = ary.lines[1..-1].map { |l|
full_name, phone_number = l.split(PIPE_DELIMITER) # => ["Mike Smith", "(123)-456-7890"], ["Tony Davis", "(213)-564-7890"]
first_name, last_name = full_name.split # => ["Mike", "Smith"], ["Tony", "Davis"]
[first_name, last_name, phone_number]
}
# => [["Mike", "Smith", "(123)-456-7890"], ["Tony", "Davis", "(213)-564-7890"]]
На этом этапе можно сгенерировать некоторые используемые данные CSV:
require 'csv'
CSV.open("/dev/stdout", "wb") do |csv|
csv << %w[first_name last_name phone_number]
munged_data.each do |row|
csv << row
end
end
, что приводит к:
# >> first_name,last_name,phone_number
# >> Mike,Smith,(123)-456-7890
# >> Tony,Davis,(213)-564-7890
Обратите внимание на использование регулярного выражения в качестве параметра для split
; Это говорит split
немного очистить результирующий вывод, разбивая его только на ноль или более пробелов, ограниченных |
:
PIPE_DELIMITER = /\s*\|\s*/
full_name, phone_number = l.split('|') # => ["Mike Smith ", " (123)-456-7890", "\n"], ["Tony Davis ", " (213)-564-7890", "\n"]
full_name, phone_number = l.split(PIPE_DELIMITER) # => ["Mike Smith", "(123)-456-7890"], ["Tony Davis", "(213)-564-7890"]
В этот момент легко разделить имена:
first_name, last_name = full_name.split # => ["Mike", "Smith"], ["Tony", "Davis"]