テキストデータを読み込む
ファイルを開いた後でファイルからデータを読み込む方法を確認します。
標準入力からデータを繰り返し読み込むには次のように記述していました。(詳しくは「while/for文を使い標準入力から繰り返し値を取得」を参照して下さい)。
while (my $line = <STDIN>){ chomp($line); print "$line¥n"; }
ここで「STDIN」は標準入力を表すファイルハンドルでした。この標準入力に対するファイルハンドルを、任意のファイルを開く際に指定したファイルハンドルに変更することでファイルからデータを読み込むことが出来ます。
例えば次のように記述します。
open(DATAFILE, "< data.txt")) or die("error :$!"); while (my $line = <DATAFILE>){ chomp($line); print "$line¥n"; }
先ほどのサンプルと異なる点は、データを読み込みたいファイルを開きファイルハンドルを割り当て、そしてそのファイルハンドルからデータを読み出している点だけです。(なお「open」関数のファイル名の前に「< 」が付いています。これはファイルを読み込み専用で開く場合に記述する記号です。詳しくは後のページで解説します)。
ファイルからデータを読み込む場合は、ファイルの終端を読み込むと「<ファイルハンドル>」が未定義値(undef)を返します。その為、ファイルの終端まで読み込んだ時点でwhile文は終了となります。
文字コードの指定
ファイルの読み書きを行う場合には、対象のファイルの文字コードを指定する必要があります。詳しくは「文字コードの指定」で解説しますが、例えば「UTF-8」に設定されたファイルから読み書きを行う場合には、プログラムの中で次のように記述して下さい。
use open ":utf8";
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; use open ":utf8"; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; open(DATAFILE, "< data4-1.txt") or die("Error:$!"); while(my $line = <DATAFILE>){ chomp($line); print "$line¥n"; }
上記を「test4-1.pl」の名前で保存します。保存する時の文字コードは「UTF-8」として下さい。
今回はカレントディレクトリに「data4-1.txt」と言うファイルを用意します。ファイル内には次のように記述を行います(ファイルの文字コードはUTF-8(BOM無し)に設定してあります)。
コマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )