ruby-on-rails - mySQL 导出字段中的 CSV 中的空白行在 ruby​​ CSV 解析期间导致错误

标签 ruby-on-rails ruby csv

我从旧系统中导出了一些粗糙的 mySQL CSV 导出文件,我正在解析这些文件并将其加载到新的 Ruby on Rails 应用程序中。

下面是一个例子:

"1","1","When a ticket is marked as Resolved, revert the assigned_to to the one who started it",,"7","1","1.00","0.00","2",NULL,NULL,"1","2009-06-04 16:40:37","2009-06-04 16:40:37",NULL,"0000-00-00 00:00:00";"2","2","Email notifications when ticket is assigned to someone",,"1","1","1.00","0.00","1",NULL,NULL,"1","2009-06-04 16:41:21","2009-06-04 16:41:21",NULL,"0000-00-00 00:00:00";"3","1","When a ticket is marked as Resolved, revert the assigned_to to the one who started it - and notify",,"7","1","1.00","0.00","2",NULL,NULL,"1","2009-06-09 18:10:47","2009-06-09 18:10:47",NULL,"0000-00-00 00:00:00";"4","3","Change Password Capability","Fix the forgot password capability (and for bonus points, add capability for user to change once logged in.","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:13:45","2009-06-09 18:13:45",NULL,"0000-00-00 00:00:00";"5","4","Manager View","Don't need listed:
  Milestone
  Status

Do need listed:
  Assigned To
  Position (since we're not assigning case numbers)","7","1","0.00","0.00","1",NULL,NULL,NULL,"2009-06-09 18:16:32","2009-06-09 18:16:32",NULL,"0000-00-00 00:00:00";"6","5","TICKETS: Remove Position / Assign ID","Don't really need to assign a position, instead would be better to automatically assign a ticket number and be able to sort on that.

Also, when you don't assign a position to a ticket, it breaks the system (or at least it doesn't show up and causes an error in the Manager View)","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:19:10","2009-06-09 18:19:10",NULL,"0000-00-00 00:00:00";"7","6","Manager View","Don't need listed:
- Milestone
- Status

Do need listed:
- Case ID (preferred)
- Position (until case id implemented)","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:24:07","2009-06-09 18:24:07",NULL,"0000-00-00 00:00:00";"8","5","TICKETS: Remove Position / Assign ID","Don't really need to assign a position, instead would be better to automatically assign a ticket number and be able to sort on that.

Also, when you don't assign a position to a ticket, it breaks the system (or at least it doesn't show up and causes an error in the Manager View)","7","1","0.00","0.00","1",NULL,NULL,NULL,"2009-06-09 18:35:00","2009-06-09 18:35:00",NULL,"0000-00-00 00:00:00";"9","7","Ability to \"assign\" projects to users","Some way, even manual in the database, to indicate which projects a user may access","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:45:16","2009-06-09 18:45:16",NULL,"0000-00-00 00:00:00";

字段用双引号括起来,以逗号结尾,行以分号结尾。正如您希望看到的那样,在特定领域内有硬返回(?)。这就是它们在 CSV 文件中的显示方式,而不是换行符。

我用于解析 CSV 的 ruby​​ 测试代码:

  csv_file_path1 = 'data/file.csv'

  CSV.foreach( csv_file_path2, { :row_sep => ";" } ) do |row|
    puts row[1]
  end

当我通过 rake 任务运行它时,我得到输出:

 1
 2   
 3
 4
 5
 6
 7
 8   
 rake aborted!
 Missing or stray quote in line 9
 ...

为什么它不能解析字段中带有硬返回的行?谢谢。

编辑:已更新以显示更多 CSV。

最佳答案

这种情况下的问题是双引号转义,而不是换行符。您有一个包含字符串 \"assign\" 的字段,它应该转义为 ""assign""。进行该更改会导致以下内容正常运行:

require 'csv'
CSV.parse(DATA, :row_sep => ";") do |row|
  puts row
end

__END__
"1","1","When a ticket is marked as Resolved, revert the assigned_to to the one who started it",,"7","1","1.00","0.00","2",NULL,NULL,"1","2009-06-04 16:40:37","2009-06-04 16:40:37",NULL,"0000-00-00 00:00:00";"2","2","Email notifications when ticket is assigned to someone",,"1","1","1.00","0.00","1",NULL,NULL,"1","2009-06-04 16:41:21","2009-06-04 16:41:21",NULL,"0000-00-00 00:00:00";"3","1","When a ticket is marked as Resolved, revert the assigned_to to the one who started it - and notify",,"7","1","1.00","0.00","2",NULL,NULL,"1","2009-06-09 18:10:47","2009-06-09 18:10:47",NULL,"0000-00-00 00:00:00";"4","3","Change Password Capability","Fix the forgot password capability (and for bonus points, add capability for user to change once logged in.","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:13:45","2009-06-09 18:13:45",NULL,"0000-00-00 00:00:00";"5","4","Manager View","Don't need listed:
  Milestone
  Status

Do need listed:
  Assigned To
  Position (since we're not assigning case numbers)","7","1","0.00","0.00","1",NULL,NULL,NULL,"2009-06-09 18:16:32","2009-06-09 18:16:32",NULL,"0000-00-00 00:00:00";"6","5","TICKETS: Remove Position / Assign ID","Don't really need to assign a position, instead would be better to automatically assign a ticket number and be able to sort on that.

Also, when you don't assign a position to a ticket, it breaks the system (or at least it doesn't show up and causes an error in the Manager View)","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:19:10","2009-06-09 18:19:10",NULL,"0000-00-00 00:00:00";"7","6","Manager View","Don't need listed:
- Milestone
- Status

Do need listed:
- Case ID (preferred)
- Position (until case id implemented)","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:24:07","2009-06-09 18:24:07",NULL,"0000-00-00 00:00:00";"8","5","TICKETS: Remove Position / Assign ID","Don't really need to assign a position, instead would be better to automatically assign a ticket number and be able to sort on that.

Also, when you don't assign a position to a ticket, it breaks the system (or at least it doesn't show up and causes an error in the Manager View)","7","1","0.00","0.00","1",NULL,NULL,NULL,"2009-06-09 18:35:00","2009-06-09 18:35:00",NULL,"0000-00-00 00:00:00";"9","7","Ability to ""assign"" projects to users","Some way, even manual in the database, to indicate which projects a user may access","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:45:16","2009-06-09 18:45:16",NULL,"0000-00-00 00:00:00";

关于ruby-on-rails - mySQL 导出字段中的 CSV 中的空白行在 ruby​​ CSV 解析期间导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957702/

相关文章:

ruby-on-rails - 处理用户发送的 "string contains null byte"

ruby - Heroku 上的 ActionController::Live(Rails4)、Pub/Sub(Redis) 不起作用

ruby-on-rails - 将多个模型的数据导出到 CSV

ruby-on-rails - 更改包含特定字符串的所有数组元素

ruby-on-rails - 带有自定义处理器的 CarrierWave 未注册

python - (Errno::EACCES) pygments.rb 权限被拒绝

ruby - 如何在我的 .rb 文件中共享变量?

ruby-on-rails - 似乎无法禁用 Rails 生成器生成规范

c# - CSV 换行符

python - 嵌套循环、迭代器和 csv