我正在努力用 Ruby 中的文件迭代任务。
(该计划的目的 = 每周,我必须从学校系统中保存 40 个包含学生分数的 pdf 文件,然后手动将它们与上周的 pdf 进行比较,并更新一个包含本周通过目标的每个学生的电子表格。这是计算机的任务!)
我已经将一个 pdf 文件转换为文本,然后我的程序从文本文件中提取正确的数据并将每个学生变成一个数组 [name, score, house group]。然后,它根据 csv 文件中的数据检查每个新数组,并添加任何新结果。
我的程序只处理一个 pdf 文件,因为我手动输入了:
f = File.open('output\agb summer report.txt')
agb = []
f.each_line do |line|
agb.push line
end
但是我有一个完整的 pdf 文件文件夹,我想在其中迭代运行该程序。当我尝试将每个结果写入一个新命名的文件时,我也遇到了问题。
我尝试过使用变量和代码块,但我现在认为您不能以那种方式使用变量?
Dir.foreach('output') do |ea|
f = File.open(ea)
agb = []
f.each_line do |line|
agb.push line
end
end
^ 这行不通。我还尝试将目录名称导出到一个数组,并执行类似的操作:
a.each do |ea|
var = '\'output\\' + ea + '\''
f = File.open(var)
agb = []
f.each_line do |line|
agb.push line
end
end
我想我对 File 和 Dir 的对象类型从根本上感到困惑?我搜索了很多,还没有找到解决方案。我是 Ruby 的新手。
无论如何,我相信这是可以做到的——我目前的备份计划是用不同的细节复制我的程序 40 次,但这听起来很荒谬。请提供想法?
最佳答案
你非常接近。 Dir.foreach()
将返回文件名,而 File.open()
将要路径。一个粗略的例子来说明这一点:
directory = 'example_directory'
Dir.foreach(directory) do |file|
# Assuming Unix style filesystem, skip . and ..
next if file.start_with? '.'
# Simply puts the contents
path = File.join(directory, file)
puts File.read(path)
end
关于Ruby - 使用文件迭代任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594575/