我的最终目标是将文件中的值与我从数据库中提取的记录进行比较。
我有一个文本文件,结构如下:
123,55,66
555,99,109
324,100,800
467,200,300
然后我从数据库中取回记录并逐个循环遍历它们。
sth.fetch do |row|
validate = "#{row[0]},#{row[20]},#{row[21]}"
names = File.readlines('results.txt')
matches = names.select { |name| name[/#{validate}/i] }
p "Result matches as expected: #{matches}"
end
所以验证为我构建了与上面示例相同的格式字符串...然后读取文件的所有行并将它们移动到数组中然后进行比较。所以这很棒,它给了我所有的匹配,但没有告诉我文件中不存在的行?
所以我尝试了
sth.fetch do |row|
File.open('results') do |f|
f.each_line do |line|
if line == validate
puts "detail: #{line}"
else
puts "detail: #{validate}"
end
end
end
end
但是这会读取每一行的每一行并进行比较,这样就可以实现我所追求的一半。
所以我想拿出'validate'字符串并读取文件的内容以查看一行是否匹配然后打印出来是匹配的。或者,如果我撤回记录并且它与文件不匹配,那么我只想要一个与消息不匹配的记录。
由于
答案 0 :(得分:0)
我会尝试以下
names = File.readlines('results.txt').map(&:chomp)
sth.fetch do |row|
validate = "#{row[0]},#{row[20]},#{row[21]}"
# for direct compare
# if names.include?(validate)
# Or for Regexp
if names.grep(/#{validate}/i).any?
p "Result matches as expected: #{matches}"
else
p "Result does not matches as expected: #{matches}"
end
end
all_matches.uniq!