【问题标题】:Converting string to csv将字符串转换为 csv
【发布时间】:2021-11-03 17:03:49
【问题描述】:

我在 Ruby 中有一段代码,它基本上通过使用将多行添加到 csv 中 csv_out << listX 我有一个我在 **options 和常规数据中提供的标题。 当我尝试查看 CSV 时遇到问题,主要是所有值都在一行中,并且在我看来,任何软件都无法将 '\n' 识别为行分隔符。

输入示例:

Make, Year, Mileage\n,Ford,2019,10000\nAudi, 2000, 100000

输出尺寸:

8x1 表格

所需尺寸:

3x3 表格

知道如何解决这个问题吗?通过将 '\n' 替换为某些内容或使用 csv.generate 以外的其他内容

csv = CSV.generate(encoding: 'UTF=8') do |csv_out|
   csv_out << headers
   data.each do |row|
      csv_out << row.values
   end

【问题讨论】:

  • 请发布您的实际代码,而不仅仅是描述它。现在我不清楚您遇到的问题,因为 CSV 文档明确指出列分隔符默认为逗号,行分隔符默认为 :auto(包括“\r\n”、“\n”和“\ r")
  • 您如何尝试查看 CSV?你用什么工具?
  • “任何软件都失败了” – 特别是哪个软件? CSV 没有完全标准化,您可能需要调整 col_seprow_sep。 (或设置软件的导入选项)
  • 当我尝试复制 csv 变量(这是一个长字符串)并将其保存为 txt 文件时,Excel、Numbers 和 Google Sheets 等软件将其显示为 8x1 尺寸的一行跨度>
  • @ArthurEdelman 也许你从字面上复制那些\n?尝试File.write("cars.csv", csv) 以消除复制粘贴错误。

标签: ruby-on-rails ruby csv export-to-csv


【解决方案1】:

问题似乎出在data.each 部分。假设data持有你发布的字符串,这个循环只执行一次,字符串写入一行。

您必须遍历 data 的各个部分,例如使用

data.split("\n").each

【讨论】:

  • 本例中的数据对象是一个哈希数组
  • 因此,row 是一个哈希。但是&lt;&lt; 假定参数是StringCSV::row 类型。当您通过Hash 时,您会期待什么?见here
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
相关资源
最近更新 更多