我正在从数据库查询中检索大量的结果哈希并将它们写入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)
正如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)
再次,您可能需要处理带有特殊字符的字段。
| 归档时间: |
|
| 查看次数: |
7523 次 |
| 最近记录: |