プログラミング基礎 I
第七回 (2005年 5月 30日):
データの入力と出力
© 2005 Martin
J. Dürst 青山学院大学
データ入力と出力の選択肢
- 入力:
- プログラムへの引数 (コマンドラインで)
- 標準入力
(キーボードから、もしくはかファイルの流し込み)
- 任意のファイルから
- 出力:
- 標準出力
(画面へ、もしくはファイルへの流し込み)
- 任意のファイルへ
プログラムへの引数
使い方:
プログラムを呼び出すときにプログラムの後に書く
例: C:\perl>bmi.pl 75 1.8
作り方: 引数を順番に shift()
で取り寄せる
仕組みの説明:
- Perl は引数を決った配列
@ARGV
に代入
$ARGV[0]
, $ARGV[1]
等でも引数は参照可能
- リスト代入も使える。例:
($weight, $height) =
@ARGV;
shift @ARGV
で配列の先頭から配列の要素を取り出せる
shift @ARGV
は shift
(もしくは
shift()
) に省略可能
標準入力
- キーボードから、もしくはファイルからの流し込み
(リダイレクト)
- リダイレクトの使い方:
<入力ファイル名
例: C:\perl>bmi.pl <bmidata.txt
- 作り方 (プログラムもファイルも同様):
- 一行ごと:
$line = <STDIN>;
- (ファイル) 全体:
@lines = <STDIN>;
標準入力の定石
- while 文で行ごとに入力を読み込む
- <STDIN> は <> に省略できる
- 入力を代入などに使わないと「暗黙の了解」の変数
(
$_
) に代入される
- いくつかの命令は指定がない場合に「暗黙の了解」の変数を使う
while (<>)
では入力が終わるまで読み続ける
- 例 (入力をそのまま出力):
while (<>) {
print;
}
join
の反対 split
- 複数の物を同じ行で読み込んだら分ける必要がある
- 区切りの文字 (列) を指定する
- 例:
while (<>) {
($name, $weight, $height) = split " ";
print "$name, $weight, $height\n";
}
標準出力
- print
等で出力されるデータを画面だけでなくて、ファイルにも出力ができる
- 出力のリダイレクトの使い方:
>出力ファイ
例: Z:\perl>bmi.pl >bmiresult.txt
例: Z:\perl>bmi.pl <bmidata.txt >bmiresult.txt
簡単な演習・宿題
- スペースを区切りに使う入力ファイルをコンマを使うファイルに変換するプログラムを作る
- 以前作った BMI
やガス請求のプログラムを、大量処理に対応するように変換:
- 入力はファイルから
- ファイルは行ごとデータがある (例えば BMI
の場合は身長、体重など)
- もっと色々な区切りの変換を行うプログラムを作る
- 自分の周りに文書・データの変換
(文字の置き換えなど) の問題を見つける