2012-04-26 6 views
0

次の小さなスクリプトを使って、私たちが入手したレポートを整理するためのファイル設定をしています。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前に動作しているようですが、私は入れません:CustomerList.txtから最初の行になり

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

。文字列と見なされるためには、配列のエントリに何かする必要がありますか?私は変数の型または何かが不一致ですか?

ありがとうございます。

+0

なぜ顧客は定数ですか? – inger

+0

は "Cust001_JohnJacobSmith(JJS)"の最初の行ですか? – inger

+0

はい、ファイルからの最初の行になります。 – JHStarner

答えて

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を変更します)

+0

うまくいった。本当にありがとう。私はまもなくルビーの小さな読書をする必要があるように見えます。 – JHStarner

関連する問題