使用ruby读取csv文件时发生奇怪的数字转换

时间:2011-05-18 08:58:45

标签: ruby excel csv

我在轨道上的红宝石中遇到了一个奇怪的问题

有一个用Excel 2003制作的csv文件。

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; Mark; 5”

win1251中的csv文件(我无法更改文件编码) UTF8中的ruby文件

ruby​​版本1.8.4 rails版本2.0.2

1 个答案:

答案 0 :(得分:0)

如果确实有一个奇怪的值,它可能与你没有发布的代码有关。编辑你的问题,并包括将独立运行的最小代码,但仍会产生可疑的输出。

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