因此,几天前我已经提出了类似的问题,这使我非常想找出答案。我想要一个可以接受用户输入并在特定列中进行搜索的系统,当找到该列时,将打印出该列所在的整行。我已经定义了将在.csv中进行搜索的方法。仍然无法按预期工作。确切的错误是:
undefined method `include?' for nil:NilClass (NoMethodError)
我已经查看并查看了.csv,并尝试了针对相同问题找到的解决方案,但似乎都没有效果。
我的data.csv
如下:
Name;Age;Gender
Edward;21;Male
Michael;21;a
Sarah;22;a
如您所见,我使用“ a
”,以便不使用空格。
此外,我在代码中使用:col_sep => ";"
以避免进一步的错误(太大了,无法将每个分号手动更改为逗号)。
我现在真的不知道该怎么办,我理解问题所在,但是找不到解决方法。
这是我的代码的样子:
require 'csv'
def find_row_in_csv(file_path, column_name, search_value)
CSV.foreach(file_path, headers: true, :row_sep => "\r\n", :col_sep => ";").find do |row|
row[column_name].include?(search_value)
end
end
search_value = gets.chomp.to_s
matching_row = find_row_in_csv('data.csv', "Name", search_value)
p matching_row
我之所以使用:row_sep => "\r\n"
是因为我收到了格式错误的CSV错误,但现在我已修复了该错误,似乎我没有为NilClass定义include?
方法(NoMethodError),该方法我不明白,因为.csv中没有空白值。
我认为它会照常运行,因为我从我得到的最佳回复中复制了很多内容,但是我已经坚持了几天。