#ruby #file-io
#ruby #file-io
Вопрос:
Я провожу сравнительный анализ. У меня есть количество файлов «x1, x2, …. xn». Я хочу использовать каждый файл как отдельный элемент ввода и обрабатывать его с помощью моего скрипта как (x1 vs x2, x1 vs x3, …. x (n-1) vs xn). Это приведет к повторению n (n-1) / 2 операций с n (n-1) / 2 результатами.
Пожалуйста, помогите мне открыть «n» количество нескольких файлов итеративным способом и получить результаты в n (n-1) / 2 комбинациях.
Имя файла будет случайным образом отличаться суффиксом *.gbk
Комментарии:
1. Я только что попробовал с несколькими «открытыми» в моем скрипте… Но у меня есть 50 файлов. Иногда он может доходить до 100. Теперь в скрипте есть 50 ненужных строк. Мне нужен какой-нибудь простой метод для одновременного открытия нескольких файлов. Как только файл открыт, я могу легко создавать комбинации и результаты.
Ответ №1:
Dir['name/of/the/directory/*.gbk'].combination(2) do |f1, f2|
puts "file #{f1} vs file #{f2}"
end
Комментарии:
1. Этот ответ интересен. Но «имя файла будет случайным образом отличаться суффиксом * .gbk». Это не одно и то же все время …. и оно будет отличаться «n» раз. Имена файлов должны быть поняты автоматически из папки :(.
2. Я попробовал этот метод. Проблема в том, что «Dir[‘name/of/ the/directory/*.gbk’] бла-бла-бла работает» и «s = ‘name/of/ the/directory /*.gbk’ Dir [s] бла-бла-бла не работает». Я получаю местоположение каталога из пользовательского ввода: (
3. @Palani попробуйте использовать пользовательский ввод.
Ответ №2:
input = "name/of/the/directory/"
array_of_input_files = Array.new
Dir.foreach(input) do |f|
if f =~ /gbk$/
array_of_input_files.push(f)
end
end
array_of_input_files.each_with_index do |inp1, index1|
array_of_input_files.each_with_index do |inp2, index2|
if index2 > index1
puts "#{inp1} vs #{inp2}"
end
end
end
Я попробовал это и работает хорошо. Пожалуйста, прокомментируйте это с помощью лучшего способа написания сценариев для вышеуказанного метода.