使用Ruby自动化大型目录系统

时间:2012-04-26 19:19:42

标签: ruby arrays file-io ruby-1.9

所以我有以下小脚本来设置文件,以便组织我们得到的报告。

#This script is to create a file structure for our survey data

require 'fileutils'

f = File.open('CustomerList.txt') or die "Unable to open file..."
a = f.readlines
x = 0

while a[x] != nil

    Customer = a[x]
    FileUtils.mkdir_p(Customer + "/foo/bar/orders")
    FileUtils.mkdir_p(Customer + "/foo/bar/employees")
    FileUtils.mkdir_p(Customer + "/foo/bar/comments")
    x += 1

end

一切似乎都在while之前发挥作用,但我一直在努力:

'mkdir': Invalid argument - Cust001_JohnJacobSmith(JJS) (Errno::EINVAL)

这是CustomerList.txt的第一行。我是否需要对数组条目执行某些操作才能将其视为字符串?我是不匹配的变量类型还是什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

以下对我有用:

IO.foreach('CustomerList.txt') do |customer|
  customer.chomp!
  ["orders", "employees", "comments"].each do |dir|
    FileUtils.mkdir_p("#{customer}/foo/bar/#{dir}")
  end
end

有这样的数据:

$ cat CustomerList.txt 
Cust001_JohnJacobSmith(JJS)
Cust003_JohnJacobSmith(JJS)
Cust002_JohnJacobSmith(JJS)

使一些东西更像红宝石的方式:

在打开文件或迭代数组时使用块,这样您就不必担心关闭文件或直接访问数组。

正如@inger所指出的,本地变量从小写客户开始。

当你想要一个字符串中的变量值时,#{}比使用+连接更加rubinic。

另请注意,我们使用chomp取消了尾随换行符! (它将var更改到位,由方法名称上的尾随!标记)