我有CSV檔案,我試圖將其匯入我的oracle資料庫,但不幸的是,我一直得到同樣的錯誤:
我有CSV檔案,我試圖將其匯入我的oracle資料庫。
> CSV::MalformedCSVError: Unquoted fields do not allowing
or
(行1)。)
我知道有很多類似的問題已經被問過了,但除了這個之外,沒有一個問題是與我的問題具體相關的,但不幸的是,它并沒有幫助。
我想解釋一下我的情況:
我有一些CSV,其中的行并不總是以一個值結尾,而是以一個逗號結尾。 相反,只有一個逗號,因為它是一個空值,所以它保持空白。 我想匯入CSV,無論結尾是帶逗號還是不帶逗號。
以下是我的CSV的前5行,由于隱私原因,數值有所改變。
id,customer_id,provider_id,name,username,password,salt,email,description,blocked,created_at,update_at,delete_at
1,,1,默認管理員,admin,1,",初始默認用戶。 f,2019-10-04 14。 28:38. 492000,2019-10-04 14。 29:34. 224000。
2,,2,默認管理員,admin,2,1,,初始默認用戶。 2019-10-04 14。 28:38. 633000,2019-10-04 14。 28:38. 633000。
3,1,,默認管理員,admin,3,1," ", 最初默認用戶。 f,2019-10-04 14。 41:38. 030000,2019-11-27 10。 23:03. 329000。
4,1,,admin,admin,4,1,"。 ,,2019-10-28 12。 21:23. 338000,2019-10-28 12。 21:23. 338000。
5,2,,默認管理員,admin,5,1,",初始默認用戶。 f,2019-11-12 09。 00:49. 430000,2020-02-04 08。 20:06。 601000,2020-02-04 08。 20:06。 601000。
正如你所看到的,結尾有時帶逗號,有時不帶逗號,而且這種結構重復的頻率很高。
這是我的代碼,我一直在玩弄它:
這是我的代碼。
def csv_replace_empty_string<
Dir.foreach(Rails.root.join('db', 'csv_export') do|filename|
next if filename == '. ' or filename == '. or filename =='extract_db_into_csv.sh' or filename =='import_csv.rb' >。
read_file = File.read(Rails.root.join('db'/span>, 'csv_export'/span>, filename)
replace_empty_string = read_file.gsub(/(?<![^,]) ""(?![^,])/, '" "')
format_csv = replace_empty_string.gsub(/?
?
?/, "
")
# format_csv = remove_empty_lines.sub!
?
) z/, "")
File.open(Rails.root.join('db', 'csv_export', filename), "w") {|file| file.put format_csv }
end
end>
我試著使用了許多不同種類的gsubs,在類似的論壇上找到的,但它沒有幫助。
這是我在資料庫中匯入CSV的功能:
我在資料庫中匯入CSV的功能。
def import_csv_into_db
Dir.foreach(Rails.root.join('db', 'csv_export') do|filename|
next if filename == '. ' or filename == '. or filename =='extract_db_into_csv.sh' or filename =='import_csv.rb' >。
filename_renamed = File.basename(filename, File.extname(filename)).classify
CSV.foreach(Rails.root. join('db', 'csv_export',filename), : headers => true, :skip_blanks => true) do |row
class_name = filename_renamed.constantize
class_name.create!(row.to_hash)
puts "Insert on table #{filename_renamed} complete"
end
end
end end
我也試過CSV提供的選項,如:row_sep => :"
"或:row_sep => "
"但一直得到相同的錯誤。
我很確定我有某種思維上的錯誤,但我似乎無法弄清楚。
uj5u.com熱心網友回復:
我通過使用以下方法解決了這個問題:
format_csv = replace_empty_string.gsub(/)
?
?/, "
")
這原本是@mgrims的回答,但我不得不調整我的代碼,進一步洗掉:skip_blanks :row_sep選項。
現在已經成功匯入了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322777.html
標籤:
