Странное преобразование чисел при чтении CSV-файла с Ruby - PullRequest
0 голосов
/ 18 мая 2011

У меня странная проблема в ruby ​​на рельсах

Есть 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

и т. д.

Итак.наконец, у меня есть следующее:

num = 5437 ... 2534 name = Mark type = 5

Почему num имеет столь странное значение?

Также я пыталсясделать так:

   str = file.read

   csv = CSV.parse(str)

   csv.each do |line|
      RAILS_DEFAULT_LOGGER.info "@@@@@@@@ #{line.to_yaml}"
   end

но опять я получил

@@@@@@@@ --- -! str: CSV :: Cell "5437 ... 2534; Марк; 5 "

CSV-файл в win1251 (я не могу изменить кодировку файла) ruby-файл в UTF8

ruby ​​версия 1.8.4 рельсы версия 2.0.2

1 Ответ

0 голосов
/ 18 мая 2011

Если оно действительно имеет странное значение, это, вероятно, связано с кодом, который вы не опубликовали. Отредактируйте свой вопрос и включите наименьший бит кода, который будет работать независимо и при этом давать сомнительный вывод.

split () возвращает массив строк. Итак, первое значение вашего CSV-файла - это String, а не Bignum. Может быть, вам нужен 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...