Ruby - 使用文件迭代任务

标签 ruby file loops batch-processing

我正在努力用 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/

相关文章:

c++ - Ruby FFI 找不到某些功能?

php - 使用meta_query进行精确的日期范围搜索

ruby - 查找句子是否包含 Ruby 中的特定短语

ruby - ruby函数中 'end +'是什么意思?

file - SilverStripe 文件标题翻译

java - 使用 Xuggler 从 mp4 创建 mp3

c - 文本被 append 在文件的开头而不是文件的末尾

java - 在循环中使用 "continue"是反模式吗?

java - 如何在java中有效地使用方法中的参数?

ruby - Grunt/Bundler 不会使用指定的 sass 版本