Откройте несколько файлов и выполните анализ n (n-1) / 2 комбинаций каждого файла с помощью ruby script

#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
  

Я попробовал это и работает хорошо. Пожалуйста, прокомментируйте это с помощью лучшего способа написания сценариев для вышеуказанного метода.