0

我正在将以下代码用于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. 在开头有一个空格和一个制表符,最后是一个额外的空格。

但是,这没有找到正确的列。我究竟做错了什么?

4

2 回答 2

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
于 2013-10-21T19:36:53.850 回答
0

您正在传递 aRegexpCSV::Row#[]期望 a String。这应该有效:

CSV.foreach(response_file, ...) do |row|
  puts row[" \tPlease help us improve by telling us why you chose that ranking. "]
end
于 2013-10-21T19:36:17.737 回答