使用Ruby在CSV标题中查找添加了空格的字符串

时间:2013-10-21 18:56:35

标签: ruby regex csv

我使用以下代码将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.,开头有一个空格和一个标签,最后还有一个空格。

然而,这并没有找到合适的专栏。我做错了什么?

2 个答案:

答案 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