我在轨道上的红宝石中遇到了一个奇怪的问题
有一个用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
答案 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