Моя конечная цель - сравнить значения из файла с записями, которые я извлекаю из базы данных.ruby сравнить строку с содержимым файла
У меня есть текстовый файл со следующей структурой:
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
так Validate строит мне ту же самую строку формата согласно приведенным выше примерам ... потом я прочитал все строки файла и переместить их в массив, а затем сравнить. Так что это здорово, что он дает мне все совпадения, но не говорит мне строк, которых нет в файле?
Так в качестве альтернативы я попытался
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» и прочитать содержимое файла, чтобы увидеть, соответствует ли строка, а затем распечатать ее соответствие. В качестве альтернативы, если я отдержу запись, и она не соответствует файлу, я просто хочу, чтобы одно не соответствовало сообщению.
Благодаря
Использование 'имен = File.readlines ('results.txt')' или 'File.open ('Результаты')' в петле плохая идея, потому что она тратит время процессора/диска. Прочитайте данные за пределами цикла, затем обратитесь к переменной внутри цикла. 'File.foreach (...)' проще и понятнее, чем 'File.open (...) do | f | f.each_line do ... ' –
Насколько велики файлы, которые читаются? У вас есть больше файлов, которые являются хитами, чем промахи, или наоборот, или даже разброс? –
Достаточно даже распространены, и они находятся в низких сотнях в настоящее время, поэтому ничего слишком большого –