我使用以下代码将puts
列添加到屏幕:
CSV.foreach(
response_file,
:col_sep => "\t",
:encoding => 'BOM|UTF-16LE:UTF-8',
:quote_char => '"',
:headers => true
) do |column|
puts column[/\sPlease help us improve by telling us why you chose that ranking.\s/]
end
实际标题名称为Please help us improve by telling us why you chose that ranking.
,开头有一个空格和一个标签,最后还有一个空格。
然而,这并没有找到合适的专栏。我做错了什么?
答案 0 :(得分:1)
column[/\sPlease help us improve by telling us why you chose that ranking.\s/]
错了。
由于:headers => true
,CSV将为每个读取的记录返回一个哈希值。
每列的哈希键将是一个由该列标题的内容组成的字符串。除非使用相同的正则表达式作为列标题,否则键不能是正则表达式。
我告诉CSV使用:headers => false
返回一个数组,然后索引到数组中以提取该列的信息。然后标题无关紧要。
这是一般的想法:
require 'csv'
headers_read = false
CSV.foreach(
'test.csv',
:headers => false
) do |column|
unless headers_read
headers_read = true
next
end
puts column[0]
end
答案 1 :(得分:0)
您传递的是Regexp
,但CSV::Row#[]
需要String
。这应该有效:
CSV.foreach(response_file, ...) do |row|
puts row[" \tPlease help us improve by telling us why you chose that ranking. "]
end