【发布时间】:2021-09-14 08:27:17
【问题描述】:
我有一个 CSV 文件,其中的列应该是空字符串而不是 null。不幸的是,当我尝试将带有空字符串的 CSV 导入我的 oracle 数据库时,例如:
3,3,"","","",f,f
我收到错误消息:
ORA-01400: cannot insert NULL into...
我明白了,因为这些列设置为不接受 null 而是一个空字符串,并且出于某种奇怪的原因,oracle 将没有空格的引号解释为 nulll在阅读 CSV 时。
我的想法是使用 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', 'csv_export', filename)) replace_empty_string = read_file.gsub(/,"",/, '," ",') File.open(Rails.root.join('db', 'csv_export', filename), "w") {|file| file.puts replace_empty_string } end end
但这只会替换文件中每一行中的第一个匹配项。
有没有更好更有效的方法来遍历目录并在 CSV 文件中每次出现的双引号之间插入空格?
【问题讨论】:
标签: ruby-on-rails ruby string csv gsub