Ruby CSV.open需要删除引号和空字符

ana*_*rce 8 ruby csv

我正在从数据库查询中检索大量的结果哈希并将它们写入csv文件.下面的代码块获取结果并创建CSV.使用该quote_char:选项,它将使用NULL字符替换引号,我需要正确创建制表符分隔文件.

但是,当NULL字符加载到目标中时,它们会转换为"",因此我想删除它们.如果我遗漏quote_char:每个字段都是双引号,这会导致相同的结果.

如何删除NULL字符?

begin
    CSV.open("#{file_path}"'file.tab', "wb", Options = {col_sep: "\t", quote_char: "\0"}) do |csv|
        csv << ["Key","channel"]           
        series_1_results.each_hash do |series_1|
         csv << ["#{series_1['key']}","#{series_1['channel']}"]
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

Leg*_*gat 4

正如csv 文档中所述,您必须设置quote_char某个字符,并且该字符将始终用于引用空字段。

在这种情况下,唯一的解决方案似乎是quote_chars从创建的 csv 文件中删除使用的内容。你可以这样做:

quotedFile = File.read("#{file_path}"'file.tab')
unquotedFile = quotedFile.gsub("\0", "")
File.open("#{file_path}"'unquoted_file.tab',"w") { |file| file.puts replace }
Run Code Online (Sandbox Code Playgroud)

我在这里假设 NULL 是唯一的转义字段。如果不是这种情况,请使用默认值quote_char: '"'gsub(',"",', '')它应该处理包含特殊字符的字段的几乎所有可能的情况。

但正如您所注意到的,查询结果很大,您自己准备 csv 文件并避免两次处理输出可能更实际。你可以简单地写:

File.open("#{file_path}"'unquoted_file.tab',"w") do |file|
    csv.puts ["Key","channel"]     
    series_1_results.each_hash do |series_1|
        csv.puts ["#{series_1['key']},#{series_1['channel']}"]
    end
end
Run Code Online (Sandbox Code Playgroud)

再次,您可能需要处理带有特殊字符的字段。