9.3 ディレクトリ操作とコマンドライン引数

ディレクトリ操作

ファイル操作をする際、ディレクトリ情報を読み取ってプログラミングができると非常に便利である。例えば、ユーザが指定した通りにディレクトリを作成する場合などはディレクトリ操作を駆使してプログラミングをすることになる。 Rubyにはディレクトリ操作をするメソッドが標準でいくつか用意されている。

# カレントディレクトリを取得する
Dir::pwd
#=> "/Users/user/sccp"

# path直下のファイル一覧を取得する
path = '/'
Dir::entries(path)
#=> [".", "..", "user"]

# new_dirディレクトリを作成する
new_dir = './new_directory'
Dir::mkdir(new_dir)
#=> 0 (ディレクトリが作成される)

# dirディレクトリが存在するかを判定する
dir = '/ruby/is/a/powerful/language'
Dir::exists?(dir)
#=> false

ディレクトリ操作のメソッドはその他にも用意されている。それらについてはRubyの公式リファレンスを参照(バージョンの古いRubyだが、この内容は変わっていない)。

コマンドライン引数

CUIツールにコマンドライン引数は不可欠と言える。コマンドライン引数とは、プログラムの実行時に渡す引数のことで、例えばcpコマンドにはコピー元のファイル名とコピー先のファイル名をコマンドライン引数で渡す。Rubyでコマンドライン引数を受け取るときには次のように記述する。

# ruby app.rb ruby is a powerful language
p ARGV
#=> ["ruby", "is", "a", "powerful", "language"]

Cでコマンドライン引数を取得すると0番目の要素に実行するファイル名が含まれるが、RubyのARGVにはこれが含まれず、後ろにコマンドライン引数のみが取得できることに注意すること。

演習問題

9.2のconcat_filesを書き換えて、n+1個のコマンドライン引数[file0, file1, file2, ... , new_file]を受け取り、fileNの内容を先頭から連結してnew_fileを新規作成した上で書き込みなさい。ただし、new_fileと同じファイル名が存在した場合は警告を表示してfileNの内容を移さずに終了すること。ヒント:Dir::exists?はあくまでディレクトリの存在判定であることに注意して、ファイルが存在するのかを判定するexists_file?メソッドを作成しなさい。

results matching ""

    No results matching ""