2011-05-18 84 views
-1

CSV文件我已經在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 名=馬克 類型= 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"

在win1251 CSV文件(我不能改變文件的編碼)在UTF8 紅寶石文件

紅寶石版本1.8.4 軌版本2.0.2

+0

忘了寫: 文件=參數[:上傳] [ '數據文件'] – Andrey 2011-05-18 09:10:03

回答

0

如果確實有一個奇怪的值,它可能與你的代碼沒有後。編輯你的問題,幷包括將獨立運行並仍然產生可疑輸出的最小代碼。

split()返回一個字符串數組。所以你的CSV文件的第一個值是一個字符串,而不是一個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 
+0

好。我需要將'5437390264172534'作爲num的值,並且對於我來說哪種類型的num或它的值是無關緊要的。 問題是值是'5437390264172534',這是不正確的( – Andrey 2011-05-18 09:53:42