无法正确使用外部文本文件的方式我使用文字列表

时间:2011-11-18 23:15:22

标签: ruby encoding io

我将一个单词列表的比较移动到一个文本文件,我现在尝试在每一行使用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 个答案:

答案 0 :(得分:1)

试试这个:

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

一个方法改变一个变量的值是不寻常的,但是由于数组#&lt;&lt;的奇怪之处,它会发生。该方法返回值更为常见:

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

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

答案 1 :(得分:1)

目前还不清楚你要完成什么,但是这里是如何读取文件行并将它们附加到数组中,这是一项常见的任务:

源文件如下所示:

的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"]