Sponsored Link

ファイル入出力の基本

ファイルを開くにはopen、閉じるにはcloseを用います。 ファイルを操作するためにはopenでファイルハンドルを取得します。 また、ファイルに対する操作により、ファイルの開き方が多少異なります。

open( FILE, "sample.txt" ); # sample.txtを開く
open( FILE, "<sample.txt" ); # 読み込み用にsample.txtを開く
open( FILE, ">sample.txt" ); # 上書き書き込み用にsample.txtを開く
open( FILE, ">>sample.txt" ); # 追加書き込み用にsample.txtを開く
open( FILE, "+>sample.txt" ); # 読み書き両用にsample.txtを開く
open( FILE, "+<sample.txt" ); # 読み書き両用にsample.txtを開く

close( FILE ); # ファイルハンドルを閉じる
sample.txt" ); # 上書き書き込み用にsample.txtを開く
open( FILE, ">>sample.txt" ); # 追加書き込み用にsample.txtを開く
open( FILE, "+>sample.txt" ); # 読み書き両用にsample.txtを開く
open( FILE, "+

ファイルからの入力

ファイルの開き方と閉じ方は前述の通りです。 開いたファイルから読み込むには、ファイルハンドルを用いて次のようにします。

sample.txt
This is a perl world.
テキストファイル
ウニ 天ぷら 鉄火丼
#!C:\Perl\bin\Perl.exe

# ファイル入出力

# ファイルを開く
open( TEXTFILE, "<sample.txt" );

# 一行読み込み
$line = <TEXTFILE>;

print $line;

# 残りの行をすべて読み込み
@lines = <TEXTFILE>;

foreach ( @lines ) {
  print $_;
}

# ファイルハンドルを閉じる
close( TEXTFILE );
;

print $line;

# 残りの行をすべて読み込み
@lines = ;

foreach ( @lines ) {
  print $_;
}

# ファイルハンドルを閉じる
close( TEXTFILE );]]>
実行結果
This is a perl world.
テキストファイル
ウニ 天ぷら 鉄火丼

読み込んだ文字列の終端に含まれる区切り文字を除去するにはchomp関数などを使います。 また、while文を用いてファイル内の全ての行を列挙するには次のようにします。

sample.txt
This is a perl world.
テキストファイル
ウニ 天ぷら 鉄火丼
#!C:\Perl\bin\Perl.exe

# ファイルを開く
open( TEXTFILE, "sample.txt" );

# 一行ずつファイルの終わりに達するまで読み込む
while ( $line = <TEXTFILE> ) {
  chomp( $line );
  print $line, "\n";
}

# ファイルハンドルを閉じる
close( TEXTFILE );
 ) {
  chomp( $line );
  print $line, "\n";
}

# ファイルハンドルを閉じる
close( TEXTFILE );]]>
実行結果
This is a perl world.
テキストファイル
ウニ 天ぷら 鉄火丼

ファイルへの出力

開いたファイルに書き込むには、ファイルハンドルを用いて次のようにします。

#!C:\Perl\bin\Perl.exe

# ファイル入出力

# 書き込み用にファイルを開く
open( OUTPUTFILE, ">output.txt" );

# ファイルに書き込み
print OUTPUTFILE "ウニ 天ぷら 鉄火丼\n";

printf OUTPUTFILE "%d + %d = %5d\n", 2, 3, 2 + 3;

# ファイルを閉じる
close( OUTPUTFILE );

# 追加書き込みようにファイルを開く
open( OUTPUTFILE, ">>output.txt" );

# 書き込み
print OUTPUTFILE "牛丼\n天丼\n親子丼\n";

# ファイルを閉じる
close( OUTPUTFILE );
output.txt" );

# ファイルに書き込み
print OUTPUTFILE "ウニ 天ぷら 鉄火丼\n";

printf OUTPUTFILE "%d + %d = %5d\n", 2, 3, 2 + 3;

# ファイルを閉じる
close( OUTPUTFILE );

# 追加書き込みようにファイルを開く
open( OUTPUTFILE, ">>output.txt" );

# 書き込み
print OUTPUTFILE "牛丼\n天丼\n親子丼\n";

# ファイルを閉じる
close( OUTPUTFILE );]]>
実行結果
ウニ 天ぷら 鉄火丼
2 + 3 =     5
牛丼
天丼
親子丼

出力先の設定

selectを用いると、printによる出力先を選択することができます。 次の例では出力先を標準出力とファイルとで切り替えています。

#!C:\Perl\bin\Perl.exe

# 書き込み用にファイルを開く
open( OUTPUTFILE, ">output2.txt" );

# 標準出力に書き出し
print "ウニ 天ぷら 鉄火丼\n";

# ファイルを出力先に設定
select( OUTPUTFILE );

# 書き出し
print "ウニ 天ぷら 鉄火丼\n";

# 出力先を元に戻す
select( STDOUT );

print "Hello, world!\n";

# ファイルを閉じる
close( OUTPUTFILE );
output2.txt" );

# 標準出力に書き出し
print "ウニ 天ぷら 鉄火丼\n";

# ファイルを出力先に設定
select( OUTPUTFILE );

# 書き出し
print "ウニ 天ぷら 鉄火丼\n";

# 出力先を元に戻す
select( STDOUT );

print "Hello, world!\n";

# ファイルを閉じる
close( OUTPUTFILE );]]>
実行結果(標準出力)
ウニ 天ぷら 鉄火丼
Hello, world!
出力内容(output.txt)
ウニ 天ぷら 鉄火丼

ファイルオープン時のエラートラップ

warnまたはdieを用いると、ファイルを開くときに生じたエラーをトラップすることができます。 warnを用いるとプログラムは続行し、dieを用いるとプログラムはその時点で停止します。 warn・dieの後ろにした文字列は標準エラー(STDERR)に出力されます。

このコードを実行するにあたり、test.txtというファイルは存在しないものとします。

#!C:\Perl\bin\Perl.exe

# ファイルを開き、ファイルが存在しない場合は
# メッセージを表示してプログラムを続行
open( TEXTFILE, "test.txt") || warn "ファイルが見つかりませんでした。";

print "この行は実行されます\n";

# ファイルを開き、ファイルが存在しない場合は
# メッセージを表示してプログラムを終了
open( TEXTFILE, "test.txt") || die "ファイルが見つかりませんでした。";

print "この行は実行されません\n";
実行結果
ファイルが見つかりませんでした。 at E:\fileio.pl line 7.

この行は実行されます
ファイルが見つかりませんでした。 at E:\fileio.pl line 13.

次のようにしてもエラーをトラップする事ができます。

#!C:\Perl\bin\Perl.exe

# 存在しないファイルを開く
if ( !open( TEXTFILE, "<test.txt" ) ) {
  print "ファイルを開けませんでした。\n";

  # プログラムを停止する
  exit;
}

close( TEXTFILE );
実行結果
ファイルを開けませんでした。