使用Dir和数组将文件读入变量

时间:2015-02-26 19:17:48

标签: ruby loops

对于作业,我使用Dir.glob方法阅读一系列着名的语音文件,然后对每一个进行一些基本的语音分析(单词数量,句子数等)。我能够读取文件,但还没有弄清楚如何将每个文件读入变量,以便我可以稍后对变量进行操作。

我得到的是:

Dir.glob('/students/~pathname/public_html/speeches/*.txt').each do |speech|
    #code to process the speech.
    lines = File.readlines(speech)
    puts lines
end

这会将所有语音打印到页面上,作为一个巨大的文本块。任何人都可以提出一些想法吗?

在该代码块中,我想要做的是将每个文件读入变量,然后对每个变量执行操作,例如:

Dir.glob('/students/~pathname/public_html/speeches/*.txt').each do |speech|
    #code to process the speech.
    lines = File.readlines(speech)
    text = lines.join
    line_count = lines.size
    sentence_count = text.split(/\.|\?|!/).length
    paragraph_count = text.split(/\n\n/).length
    puts "#{line_count} lines"
    puts "#{sentence_count} sentences"
    puts "#{paragraph_count} paragraphs"
end

任何建议或见解都会非常感激!谢谢!

2 个答案:

答案 0 :(得分:0)

关于你的第一个问题:

readLines将文件转换为字符串数组,然后您看到的是以字符串数组作为参数的puts的行为。

如果您希望将数据视为数组,请尝试puts lines.inspect

另外:如果您还没有这样做,请查看Ruby控制台irb。这对于尝试你所询问的各种事物非常有用。

答案 1 :(得分:0)

以下是工作的结果:

speeches = []

Dir.glob('/PATH TO DIRECTORY/speeches/*.txt').each do |speech|
    #code to process the speech.
    f = File.readlines(speech)
    speeches << f
end

def process_file(file_name)
    # count the lines
    line_count = file_name.size
    return line_count
end

process_file(speeches[0])