对于作业,我使用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
任何建议或见解都会非常感激!谢谢!
答案 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])