Использование Ruby для автоматизации большой системы каталогов
Итак, у меня есть следующий небольшой скрипт для настройки файла для организации отчетов, которые мы получаем.
#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 ответ
Следующее работало для меня:
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, локальные переменные начинаются со строчной буквы, customer.
Когда вы хотите, чтобы значение переменной в строке usign #{} было более рубиновым, чем конкатенация с +.
Также обратите внимание, что мы сняли завершающий символ новой строки, используя chomp! (который изменяет переменную на месте, отмеченную буквой! в имени метода)