#ruby #excel #csv
#ruby #excel #csv
Вопрос:
у меня странная проблема в ruby on rails
Существует csv-файл, созданный с помощью Excel 2003.
5437390264172534;Mark;5
У меня есть страница с загрузкой входных данных, и я читаю файл следующим образом:
file = params[:upload]['datafile']
file.read.split("n").each do |line|
num,name,type = line.split(";")
logger.debug "row: #{num} #{name} #{type}"
end
и т. д
Итак. наконец, я получил следующее:
число = 5437 …2534 имя = Тип метки = 5
Почему num имеет такое странное значение?
Также я пытался сделать вот так:
str = file.read
csv = CSV.parse(str)
csv.each do |line|
RAILS_DEFAULT_LOGGER.info "@@@@@@@@ #{line.to_yaml}"
end
но снова я получил
@@@@@@@@— — !str:CSV::Ячейка «5437…2534; Отметка; 5»
Файл csv в win1251 (я не могу изменить кодировку файла), файл ruby в UTF8
версия ruby 1.8.4, версия rails 2.0.2
Комментарии:
1. забыл написать: file = params[:upload][‘файл данных’]
Ответ №1:
Если оно действительно имеет странное значение, вероятно, это связано с кодом, который вы не опубликовали. Отредактируйте свой вопрос и включите наименьший фрагмент кода, который будет выполняться независимо и по-прежнему выдавать ваш сомнительный результат.
split() возвращает массив строк. Итак, первое значение вашего CSV-файла — это строка, а не величина. Может быть, вам нужен num.to_i
или подобный тест num.is_a?(Bignum)
где-нибудь в вашем коде.
file = File.open("test.csv", "r")
# Just getting the first line
line = file.gets
num,name,type = line.split(";")
# split() returns an array of String
puts num.class
puts num
# Make num a number
puts num.to_i.class
puts num.to_i
file.close
Запуск этого файла здесь дает мне это:
$ ruby test.rb
String
5437390264172534
Bignum
5437390264172534
Комментарии:
1. что ж. мне нужно получить ‘5437390264172534’ в качестве значения num, и для меня не имеет значения, какой тип num или его значение. Проблема в том, что значение ‘5437390264172534’ неверно (