0

したがって、取得したレポートを整理するためのファイル設定を行うための次の小さなスクリプトがあります。

#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ます。文字列と見なされるには、配列エントリに対して何かを行う必要がありますか?変数の型などが一致していませんか?

前もって感謝します。

4

1 に答える 1

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で始まります。

文字列内の変数の値が必要な場合、#{}を使用すると、+で連結するよりもルービニックになります。

また、chompを使用して末尾の改行を削除したことにも注意してください。(これにより、メソッド名の末尾に!が付いた変数が変更されます)

于 2012-04-26T19:44:21.620 に答える