将文本文件拆分为单独的单词并存储在Ruby中的数组中

c7rzv4ha  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(87)

我试图读取一个文本文件,然后将其单独的单词存储在一个数组中。但我找不到一种方法来根据文字来分割它。

text_file = []

File.open(file, "r") do |f|
  f.lines.each do |line|
    text_file << line.split.map(&:to_s)
  end
end

上面的方法创建了一个数组的数组,它将所有单词存储在数组中的一行中,依此类推。
有没有一种方法可以让数组text_file保存一个包含所有单词的数组?

yptwkmov

yptwkmov1#

是的。要么:

text_file.push(*line.split.map(&:to_s))

或:

text_file.concat(line.split.map(&:to_s))
ldfqzlk8

ldfqzlk82#

如果你想要所有的单词,唯一的,排序:

text_file = [ ]

File.open(file, "r") do |f|
  f.each_line do |line|
    text_file += line.split
  end
end

text_file.uniq!
text_file.sort!

这不是最佳的实现,但它应该工作。为了适应更真实的情况,你可能需要使用String#scan来提取更具体的单词,而不是被标点符号或连字符之类的东西绊倒。

wljmcqd8

wljmcqd83#

修改你的代码,这将做到这一点:

text_file = []

File.open('document.rb', "r") do |f|
  f.each_line do |line|
    arr = line.split(' ')
    arr.each do |word|
      text_file << word
    end  
  end
end
ezykj2lf

ezykj2lf4#

下面的代码读取file的内容,拆分由空格分隔的行和单词,然后通过冻结结果来创建一个名为WORDS的常量。

WORDS = File.read(file).split(/[ \n]/).freeze

如果您还想使用制表符以及空格和换行符作为分隔符,请使用以下内容:

WORDS = File.read(file).split(/[ \n\t]/).freeze

相关问题