Input, Ooutput
入出力

5 章

入出力について教科書を5.7節から説明する.

5.7 節

ファイルをプログラムから読み書きするとき,ファイルハンドルを使用する. pl ディレクトリに,任意のテキストデータからなるファイル text1.txt を作れ.

以下のサンプルプログラムを sample0601.pl という名前で作成し,実行せよ

#!/usr/bin/perl -w
use strict;

open INFILE, "text1.txt";
while (<INFILE>) {
    chomp;
    print "It was $_ that I saw!\n";
}
close INFILE;

図6.1

プログラム内でユーザが入出力用にファイルをオープンすることができる.

open INFILE, "< file1";
open OUTFILE, "> file2";
open APPEND, ">> file3";

図6.2

は,上から file1 を入力用に開く, file2 を出力用に開く, file3 を追加出力用に開くという意味である.それぞれシェルに対して入力す る文字と同じ記号が使われている.> は一旦出力用ファイルを空にして 新しい内容だけを書き込むのに対し,>> は古い内容を残したまま,後 に新しい内容を追加する.< も > も付かない場合は < を指定した のと同じ意味になる.

5.8 節

ファイルのオープンは失敗する可能性がある.

open INFILE, "< file1"
  or die "Cannot open: $!";

図6.3

をファイルオープンの構文と思い,毎回この構文を使ってオープンを行う.

この方法で sample0601.pl のファイルオープン部分を書き直したものは 以下のようになる.

#!/usr/bin/perl -w
use strict;

open INFILE, "< text1.txt"
  or die "Cannot open: $!";
while (<INFILE>) {
    chomp;
    print "It was $_ that I saw!\n";
}
close INFILE;

図6.4

書き込み用にエラーチェックつきでファイルをオープンしたいときは 以下のように書く.

open OUTFILE, "> text2.txt"
  or die "Cannot open: $!";

図6.5

sample0601.pl の出力を text2.txt というファイルに書き出すように するには以下のようにすればよい.

#!/usr/bin/perl -w
use strict;

open INFILE, "< text1.txt"
  or die "Cannot open: $!";
open OUTFILE, "> text2.txt"
  or die "Cannot open: $!";
while (<INFILE>) {
    chomp;
    print OUTFILE "It was $_ that I saw!\n";
}
close INFILE;
close OUTFILE;

図6.6

課題4

5.13 練習問題 2,3 を解け.
(ヒント1:複数行の入力をまとめて読み込む方法は3.8節を参照. 以下のプログラムで読み込んだ行をそのまま出力するプログラム になる.

#!/usr/bin/perl -w
use strict;

my @lines = <STDIN>;
chomp(@lines);
foreach(@lines){
    print "$_\n";
}

図6.7

これを変更して加工して出力するようにする. 5.5節のprintfが利用できる.)
(ヒント2:キーボードから同じ入力を繰り返し入力するかわりに シェルのリダイレクション機能を使ってファイルから入力することができる. キーボードから

hello
good-bye

図6.8

を入力するかわりに上記内容のファイルを作り,例えば in1.txt と言う名前で保存しておくと, プログラム名がp1.pl の場合は

./p1.pl < in1.txt

図6.9

とすれば同じ入力になる.perl の open の入手力モードを表す " <, >, >> " はこの機能を模したもので, シェルのリダイレクションでも出力,追加出力でファイルに 出力することもできる.)
解答プログラムを添付メールとして提出せよ. メールの宛先は <hiroshi@tokai.ac.jp> とし, Subject (件名)を Seminar 2-4 とせよ.


Updated in November 20, 2019, schedule, Yamamoto Hiroshi