|
||||
|
|
7章 ファイル操作
|
|
|
ファイルオープン、クローズ ( open , close )
ファイルを使用するには場合は、先立ってファイルを open 関数を用いオープンする必要があります。 open 関数では [ ファイルハンドル ] 、[ 使用するファイル] 、[ 操作方法 ] を指定して起動します。何らかの理由でファイルのオープンに失敗した場合は偽となる値を返します。
open ( FILEHANDLE , "ファイル名" ) ;
ファイルハンドル
ファイルハンドルとはオープンしたファイルを表わす変数でプレフィクスは付けません。通常は大文字で指定する習慣になっています( mustではありません )。 出力、読込みの時に open関数で取得したファイルハンドルを指定してファイルへの操作を行います。操作方法
ファイルに対して読み取り用としてファイルを使うか、書込みを行うファイルなのか? と言う操作方法は open関数でファイルを開く時に指定します。次のような指定があります。
ファイルを閉じる
オープンしたファイルは close を用い開放する必要があります。通常ファイルへの入出力は即時に行われるのでは無く入出力用バッファに貯められ一定量になった段階か close が行われた時に出力されます。
close ( FILEHANDLE ) ;
ファイルからの読込み
ファイルからの読込みは open で取得したファイルハンドルに対して関数や、通常の代入のような方法で行います。
一行の読込み
$line = <FILEHANDLE> ;
FILEHANDLEに対応づけられたファイルの先頭から1行ずつデータを読み込んで行きます。デフォルトでは1行の区切りとして改行文字が用いられます。 リストコンテキストによる一括読込み
@array = <FILEHANDLE> ;
左辺にリスト変数を置くリストコンテキストでデータを受け取ると、FILEHANDLEに対応づけられたファイルの内容を一括して配列へ代入する事が出来ます。1行目が $array[0]といった具合で順に格納されています。 read 関数による読込み [ 書式 ]
read ( FILEHANDLE , スカラ変数 , 読み出すバイト長 ) ;
read(FILEHANDLE,$data,64);
ファイルの先頭から 64Byteのデータを取得します。 この read関数によるデータの読込みは CGI でデータの受け渡し方法が POST の時データを受け取る際に、標準入力から送信されたバイト数分データを読み込むのに使用します。 ファイルへの書込みprintを使用する出力
print FILEHANDLE 出力データ ;
ファイルへの出力は通常の print , printf の引数に open で取得したファイルハンドルを指定します。それ以外は通常の print文と変りありません。 syswriteを使用する出力
syswrite [ FILEHANDLE ] , [出力データ] , [出力バイト長];
システムコール write(2) を用いて、指定した ファイルハンドルへ指定バイト分のデータの出力を試みます。 printと異なりデータのバッファリングを行わず、実行時すぐにデータをファイルへ出力します。 使用方法
ファイルをオープンしてもデータの書き込み/読み込みを行なわなければ意味がありません。 当然それらを行う事になりますが、制御構文と組み合せてファイルにある全てのデータに対する操作などを見ていきます。
whileとの併用
[ 非省略形 ]
while ( $line = <FILEHANDLE> ){ 処理 } この例ではスカラ変数 [ $line ] へファイルの内容が先頭から順に一行ずつ読み込まれていきます。 全行を読み出した段階で [ $line ] が未定義となるためこの繰り返しを終了します。 [ 省略形 ]
while ( <FILEHANDLE> ){ 処理 } この例は Perlの記述方法の特徴である省略した記述方法を使っています。 動作は上の例と同等の処理ですが、代入されるスカラ変数として [ $_ ] が用いられています。 foreachとの併用
@Array = <FILEHANDLE> ; foreach $tmp ( @Array ) { 処理 } これもwhileとの併用で紹介した例と同等の動作をします。 まずファイルの内容を配列へ一括して代入してその配列に対して foreachステートメントを使用しています。 配列操作の詳しい解説は [ 3章 配列 ] を参照下さい。 オープン時のエラートラップ
open ( FILEHANDLE , "< filename ") || die "ファイルを開けません :$!\n";
論理積演算子( || 又は or )で結合する事により、open が成功すれば式が真として右側の命令は実行されません。 これを利用して失敗して偽となる値が戻った時にだけ右側 die関数が実行されるようになります。 die関数
引数の値を STDERR に出力して、現在の $! (エラー番号) で終了します。ファイル検査演算子
ファイルの状態、属性を確認する為にPerlではいろいろな演算子が用意されています。 ただし Perlはもともと UNIX 環境で作られてきた言語のため、 Windows環境では利用できないものも多いです。
ファイルの有無を確認する
if ( -e "sample.txt" ) { print "sample.txt は存在します。" ; } else { print "sample.txt 存在しません。" ; } ファイル操作関数
tell
[ファイルポインタ] = tell [FILEHANDLE] ;
引数で与えられたファイルハンドルの現在のファイルポインタの位置を返します。 ※ファイルポインタ → 現在の書込み、読込み位置 seek
seek [ FILEHANDLE ] , [ オフセット値 ] , [ 起点 ] ;
対象のファイルハンドルにファイルポインタを設定します。成功の時は真、失敗すれば偽となる値が返ります。第3引数に起点(下記参照)第2引数にオフセット値を設定します。
eof
[ 真 | 偽 ] = eof FILEHANDLE ;
指定されたファイルハンドルの最終行か、ファイルハンドルがオープンされていなければ真となる値を返します。 この関数はファイルの終了判定によく使われます。 stat
[ 配列変数 ] = stat [ FILEHANDLE | ファイル名 ] ;
ファイルハンドル又はフルパスで指定したファイルの情報を 13要素の配列として返します。 失敗した時はヌルリストが返ります ※取得される要素は下記を参照してください ( Windows 環境では無い情報も在る)
unlink
[ 削除したファイル数 ] = unlink ファイル名1 ファイル名2 … ;
指定したファイルを削除します。引数に削除するファイルを指定し、戻り値は削除したファイルの数が返ります。 rename
[ 真 | 偽 ] = rename [ 現在のファイル名 ] , [ 変更後のファイル名 ] ;
ファイル名を変更します。第一引数に現在のファイル名、第二引数に変更するファイル名を指定します。成功すれば真、失敗すれば偽となる値が返ります。 |