- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在 ruby/rails 中导入此 CSV 文件时遇到问题
我得到的错误信息是这样的:
Missing or stray quote in line 1 (CSV::MalformedCSVError)
但我不确定发生了什么,因为我的 CSV 看起来非常好。以下是示例数据:
"lesley_grades","lesley_id","last","first","active","site","cohort","section","sections_title","faculty","completed_term_cred","term","sec_start_date","sec_end_date","grade","stc_cred","active_program","most_recent_program","intent_filed","stc_term_gpa","sta_cum_gpa","start_term","prog_status","last_change_date"
,1234456,John,Doe,TRUE,"Baltimore, MD",0002012,14/FA_ERLIT_6999_U15AA,Directed Independent Study,"Jane Hicks , Jill Saunders",2,14/FA,9/3/14,12/17/14,B-,2,EME.2270.TCBAL.01,EME.2270.TCBAL.01, ,3.3,3.148,12/SU,A,9/2/14
,1234455,John,Doe,TRUE,"Baltimore, MD",0002012,14/FA_ERSPD_6999_U15AG,Directed Independent Study,"Jane Hicks , Jill Saunders",3,14/FA,9/3/14,12/17/14,A-,3,EME.2270.TCBAL.01,EME.2270.TCBAL.01, ,3.3,3.148,12/SU,A,9/2/14
为了提供上下文,实际上 csv 看起来像这样,其中 lesley_grades 作为第一列。 over CSV 脚本文件将查找第一列并检查是否激活了一个 Active Record 对象,然后它将它存储在具有完全相同模型名称的数据库中,假设所有迁移都是预先设置的。
lesley_grades lesley_id last first active
1234556 Doe John TRUE
1123445 Doe John TRUE
这是导致我出现问题的部分代码
def import!(csv)
csv_reader = CSV.parse(csv)
ActiveRecord::Base.transaction do
csv_reader.each do |row|
set_record_class_and_columns(row) if header_row?(row)
if columns_mapping_defined? && record_class_defined? && record_row?(row)
import_row(row)
end
end
if imports_failed?
puts 'Aborting importing and rolling back...'
show_errors
raise ActiveRecord::Rollback
end
end
结束
它不能通过这一行 csv_reader = CSV.parse(csv)
在我将引号放入标题之前我收到了这个错误
未加引号的字段不允许使用\r 或\n(第 1 行)。 (CSV::MalformedCSVError)
更新
CSV 像这样从命令行启动:
rails runner scripts/import_csv.rb < lesley_grades.csv
然后在这里初始化
CSVImporter.new.import!($stdin)
但正如@smathy 建议的那样,我将方法更改为 CSV.parse(csv.gsub/\r/, '')
但是现在 def import!
方法接收 gsub
block 会产生这个错误
in `import!': undefined method `gsub' for #<IO:<STDIN>> (NoMethodError)
不确定如何使 CSV 成为对象?
有什么建议或重构来使这项工作正常进行吗?谢谢大家
最佳答案
您的 CSV 数据来自 Windows 并且具有 CRLF(即“\r\n”)行结尾而不是“\n”,您需要在尝试解析它之前删除“\r”:
CSV.parse(csv.gsub /\r/, '')
在来自 OP 的附加信息之后:
CSV.parse(csv.read.gsub /\r/, '')
关于ruby-on-rails - 第 1 行中的引号缺失或遗漏 (CSV::MalformedCSVError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29289208/
我正在尝试运行某人给我的一些 C++ 代码。起初有一个指向 istream 文件的断开链接,我通过添加包含路径修复了这个问题: C:\Program Files (x86)\Embarcadero\R
谁能告诉我如何防止 .git 目录的内容被上传到 PyPi。我的 MANIFEST.in 看起来像这样: global-include *.py *.js *.rst *.html *.css *.l
最近在 typescript 项目的VSCode中遇到如下情况: 文件:some-interface.ts // no import statements have been skipped. Thi
为我找到这个问题的合适标题有点困难,所以也许这个例子会澄清我的问题。 我正在发出 ajax 请求以将一些变量从 JS 传递到 PHP。这些变量之一是带有一些选项的 URL,即 https://www.
我是一名优秀的程序员,十分优秀!