Не могу правильно использовать внешний текстовый файл, как я использовал буквальный список - PullRequest
0 голосов
/ 19 ноября 2011

Я перемещаю сравнение списка слов в текстовый файл, который я сейчас пытаюсь ввести, используя IO.gets в каждой строке.Это полностью изменило мои результаты.

В основном я использую Trie, чтобы выяснить, находится ли префикс внутри слова - теперь мой вывод показывает только префиксы, что означает, что ни один из них не "правильно" сопоставлен, ипо умолчанию возвращает все префиксы.

Это проблема кодирования или что происходит?

Вот конкретный код, о котором я говорю - в отличие от:

sources = ['Bash', 'cplusplus', 'java',  'javascript', 'php', 'python', 'ruby']
prefixes = ['ab', 'ba', 'bu', 'Jav', 'ph', 'ru', 'ze']

Я делаю это сейчас:

def fileList(dir, array)
  file = File.new(dir, "r")
  while (line = file.gets)
    array << line
  end
end

sources = Array.new
prefixes = Array.new

fileList("../lists/sources.list", sources)
fileList("../lists/prefixes.list", prefixes)

С каждым элементом, имеющим свою собственную строку в текстовом файле

https://github.com/jphenow/merge_prefix/tree/master/ruby

Огромное спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Не совсем понятно, чего вы пытаетесь достичь, но вот как прочитать строки файлов и добавить их в массив, что является достаточно распространенной задачей:

Исходные файлы выглядят так:

sources.list:

Bash
cplusplus
java
javascript
php
python
ruby

и

prefixes.list:

ab
ba
bu
Jav
ph
ru
ze

Код выглядит так:

require 'pp'

def fileList(dir, array)
  array += File.readlines(dir).map(&:chomp)
end

sources = Array.new
prefixes = Array.new

pp fileList("sources.list", sources)
pp fileList("prefixes.list", prefixes)

 => ["Bash", "cplusplus", "java", "javascript", "php", "python", "ruby"]
 => ["ab", "ba", "bu", "Jav", "ph", "ru", "ze"] 
1 голос
/ 19 ноября 2011

Попробуйте это:

def file_list(dir, array)
    Dir.chdir dir
    Dir.glob("*").each{|file| array << file}    
end

Это необычно для метода, чтобы изменить значение переменной, но это произойдет из-за причуды массива # <<. Обычно метод возвращает значение: </p>

def file_list(dir, array)
    Dir.chdir dir
    array + Dir.glob("*")
end

sources = fileList("./somedir", sources)
...