ファイル操作1
ファイルを開く
さて、基本的に多くの言語で【ファイル操作】ができれば脱初心者と言われます(と思うのは私だけ?)
ファイル操作をするといのは、まず基本のテキストファイルを読み書きできるようになるということです
CGIを作成するにしても、やはりファイル操作は必要です
掲示板に書き込まれた内容を保存して、さらにそれを読み込んでHTMLに出力する必要があります
ファイル操作にはまずopen関数を使います
open関数では、開きたいファイルの パス とファイルハンドルを指定します
open(file-handle , "file-path")
パスは、開きたいファイルの名前を拡張子も含め記述します
実行中のファイルの場所が現在のディレクトリとなっています。他のディレクトリを指定することも可能です
ファイルハンドルとはなんでしょう?
ファイルハンドルは、開いたファイルに対してスクリプトで操作するときのための名前のようなものです
実際にスクリプトを書けばわかると思いますが、ファイルを開いたあとはこのファイルハンドルに対して操作します
open関数を実行させたときにファイルが存在しないというケースも考えられます
このような場合プログラムはエラーを出します。そこで open関数では以下の書式でエラー処理が可能です
open(file-handle , "file-path") || die value;
あえてファイルを作成せずに、以下のプログラムを実行させてみましょう
open(file,"a.txt") || die "ファイルが見つかりません" ;
print "ファイル操作のテストにょ";
ファイルが存在しないなどのエラーが出た場合、dieが指定してあればvalueを出力してプログラムを終了します
エラーが検出されると、プログラムは print "ファイル操作のテストにょ"; を実行せずに終了します
似たようなものでwarnという書式もあります
open(file-handle, "file-path") || warn value;
これもエラーが出た場合に value を出力するというところはdieとまったく同じです
ただしwarnはプログラムを終了しません
open(file,"a.txt") || warn "ファイルが見つかりません" ;
print "ファイル操作のテストにょ";
このプログラムでは、ファイルが見つからなくても print "ファイル操作のテストにょ"; を実行します
ファイルの内容を出力
次に、いよいよファイルを読み込んで、それを画面に出力させてみましょう
まず、数行の文章が書かれたtxtファイルを用意して、実行するPerlのファイル(.pl)と同じディレクトリに置いてください
ここでは、txtファイルの名前を test.txt にしましょう。ありがちですね
ファイルを出力させるのにも print 関数が有効です
しかし、実はprint関数には私たちが今まで使ってきた書式以外の書式があります
print
print file-handle
print だけの場合は特殊変数$_を参照します
これはファイル操作では大切なことなので、覚えてください
では、さっそくですがファイルを開いて内容を画面に表示させてみましょう
open(FILE , "test.txt") || die "ファイルが見つかりません";
print <FILE>;
close(FILE);
まずprint関数ではファイルハンドルを指定しています。
このときファイルハンドルを<>で囲っていますが、これはファイル内容を明示的に表してます
printやwhileを使った表示方法(後記)や、変数に書き出すのに用います
次にcloseという関数が使われてますね
これはその名のとおり、開いたファイルを閉じます
プログラムが終了すれば自動的に閉じますが、確実に閉じておきたい場合や同じスクリプト内で同じファイルハンドルを使いたいときは閉じます
成功すると1を返します
printを使った場合はファイルの内容を全て書き出してしまいました
ですが、一行一行を個別に読み込んで、それに対して何らかの処理をしたい場合もあります
このような場合に while を使います
open(FILE , "test.txt") || die "ファイルが見つかりません";
while(<FILE>) {
$_ =~ s/\n/にゅ\n/;
print;
}
close(FILE);
正規表現による置換えが使われてますね
ファイルを書き出す前に改行文字を探し、「にゅ\n」という文字に置換えて出力しています
while(<file-handle>) {
statements
}
とすることで、指定されたファイルハンドルを一行ずつ読み出して
特殊変数$_に代入後、ステートメントを実行します
ファイルの最後の行までこの作業がループされるので、細かい読み出しが可能です
open(file-handle , "file-path")[ || { die | warn } value ]
ファイルを開きます
file-handle ファイルハンドルを指定します。ファイルの操作はファイルハンドルに対して行ないます。省略不可
file-path 開くファイルを指定します。実行中のファイルのディレクトリが現在のディレクトリになります。省略不可
die エラーが出た場合valueを出力してプログラムを終了します。省略可
warn エラーが出た場合valueを出力してプログラムを続けます。省略可
value dieかwarnが指定されていたとき、エラー時のメッセージを指定します
close(file-handle)
ファイルを閉じます
クローズに成功すると1を返します