2011-06-21 38 views
0

從SQL轉儲中解析內容時,我面臨「非法引用」錯誤,並且轉儲文件採用帶有製表符(\ t)分隔符的TXT格式。在紅寶石上使用FasterCSV在線非法引用1.8.7

require 'rubygems' 
    require 'faster_csv' 
    begin 
    FasterCSV.foreach(excel_file, :quote_char => '"',:col_sep =>'\t', :row_sep =>:auto, :headers => :first_row) do |row| 

    col= row.to_s.split(/\t/) 

    if col[3]!="" or !col[3].empty? 
    color_value=col[3].to_s.capitalize 
    #Inser Color 
    color=Color.find_or_create_by_name(:name=>color_value) 
    elsif col[3].empty? 
    color_id= nil 
    end 

    end 
    rescue Exception => e 
    puts e 
    end 

的程序來執行與成功地運行但本象下面 無效數據(@字體面...)平均執行終止的「非法引用在線路錯誤3.

ID Name code comments 
    1 white 234 good 
    2 Black 222 
    3 red 343 @font-face { font-family: "Verdana"; .....} 

任何一個可以建議我當列出現無效數據如何跳過?

在此先感謝。

回答

0

我不知道這是否會解決日E錯誤您所看到的,但你需要用雙引號轉義字符,例如:

:col_sep => "\t" 
+0

韋特感謝我仍面臨着同樣的問題「非法引用第3行」我可以ķ。現在,如何跳過包含相同無效數據的行? – prabu

0

FasterCSV也不是很客氣的格式錯誤數據。 我不知道有這個解決方案。

但是 - 如果您的示例文件實際上並不包含任何使用「 那麼也許只是用不同的quot_char(如「)

+0

謝謝!我試過用單引號字符(')。但我的問題是如何處理包含一些無效數據的數據表,我有CSS代碼。我可以知道如何跳過這一段並繼續執行程序。 – prabu

+0

也許你可以從這個異常救援?我沒有試過這個。 –

0

可以使用ASCII代碼爲NULL字符引用 - \0x00 - 作爲這樣的:

FasterCSV.foreach(excel_file, :quote_char => '\0x00',:col_sep =>'\t', :row_sep =>:auto, :headers => :first_row) do |row| 
... 
end 

你可以找到一些ASCII字符這裏的圖表:http://www.bluesock.org/~willg/dev/ascii.html