ファイルからテキストデータを読み込む

ファイルをオープンすると、ファイルからテキストデータを読み込むことができます。ここでは Perl のプログラムでファイルからテキストデータを読み込む方法について解説します。

(Last modified: )

テキストデータを読み込む

標準入力からデータを繰り返し読み込むには次のように記述していました。(詳しくは「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, "< data.txt") or die("Error:$!");

while(my $line = <DATAFILE>){
  chomp($line);
  print "$line\n";
}

close(DATAFILE);

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

あらかじめ sample.pl と同じディレクトリに data.txt というファイルを作成しておきました(文字コードは UTF-8 です)。ファイルには次のようなテキストデータを入力してあります。

ファイルからテキストデータを読み込む(1)

プログラムを実行すると次のように実行結果が表示されます。

ファイルからテキストデータを読み込む(2)

ファイルを開き、ファイルに記載されていたテキストデータを読み込んだあと画面に表示しました。

-- --

Perl のプログラムでファイルからテキストデータを読み込む方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。