как собрать данные определенного типа с помощью сценариев ruby - PullRequest
3 голосов
/ 07 сентября 2010

У меня есть 5 файлов file1.txt file2.txt....file5.txt, тогда у меня есть список из 3 слов red white blue

Я пытаюсь выяснить, сколько раз и в каких файлах red white blue встречается.

Наконец, формат должен быть таким:

red = file1.txt, file3.txt, 2
white = file2.txt, 1
blue = file1.txt, file2.txt, file3.txt, 3

Это то, что у меня есть до сих пор:

files.each do |i|
    curfile = File.new("#{i}","r")
    while (line = curfile.gets)
        mywords.each do |j|
           if (line ~= /\b#{j}\b/)
               ##what kind of data structure should I put the results in??
           end
        end
    end
end

В какую структуру данных я должен поместить результаты?

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Я смог сделать это с помощью следующего кода:

mystring = ""
colors = %w{red white blue}
final_list = Arrays.new{colors.size}
final_list.each_with_index do |thing,index|
    final_list[index] = ""
end
files.each do |i|
    File.open("#{i}","r") { |f|
       mystring = f.read
    }
    colors.each_with_index do |thing,index|
       pattern = /#{thing}/i
       if (mystring =~ pattern)
           final_list[index] = final_list[index] + i + " "
       end
    end
end

colors.each_with_index do |thing,index|
    list = final_list[index].split (" ")
    puts "#{thing} (#{list.size})= #{list.join(',')}"
end
1 голос
/ 07 сентября 2010
results = {}
%w(red white blue).each do |word|
  results[word] = Hash.new(0)
  %w(file1.txt file2.txt file3.txt file4.txt file5.txt).each do |file|
    scanner = StringScanner.new(File.read(file))
    while (scanner.scan_until(/\b#{word}\b/)) do
      results[word][file] += 1
    end
  end
end

Это вернет хеш, где ключи - это цвета, а значения - хэши имен файлов и количества совпадений в каждом файле:

{'red' => {'file1.txt' => 1, 'file2.txt' => 2}, 'blue' => {'file1.txt' => 1}} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...