我有一個CSV檔案,其中的列應該是空字串而不是空。不幸的是,當我試圖將帶有空字串的CSV檔案匯入我的oracle資料庫時,例如:
3,3,"",",",f,f
我得到的錯誤資訊是:
ORA-01400: cannot insert NULL into...
我得到這個訊息是因為這些列被設定為不接受空值,而是一個空字串,并且由于一些奇怪的原因,在閱讀CSV時,沒有空白的引號被oracle解釋為nulll。
我的想法是使用gsub來瀏覽CSV檔案,并在出現的地方添加一個空格
。
,"",
這樣,它看起來就像下面這樣:
3,3," "," ",f,f
當我通過手動在引號之間添加空格并將其匯入資料庫來測驗時,這似乎是可行的。我試著將其自動化,因為我有40多個CSV檔案。到目前為止,我有:
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(/,"",/, ', " ", ')
File.open(Rails.root.join('db', 'csv_export', filename), "w" ) {|file| file.put replace_empty_string }
end
end>
但是這只替換了檔案中每一行的第一個出現的內容。
是否有一個更好的更有效的方法來通過目錄并在CSV檔案中的每一次出現的雙引號之間插入空白?
uj5u.com熱心網友回復:
你需要匹配位于字串或雙引號開始/結束的位置。
你可以使用
replace_empty_string = read_file.gsub(/(?<![^,]) ""(?![^,])/, ' " "')
請看regex演示。
細節
(?<![^,])- (與(?<=A|,)相同) - 在字串的開始位置或緊接著逗號的位置""- 兩個"字符 。
(?![^,])- (與(?=z|,)相同) - 位于字串的末尾或緊隨逗號的位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/307015.html
標籤:
