2012年12月18日火曜日

コンソールアプリケーション2(Delphi Advent Calendar 2012-12-18)

Delphi Advent Calendar 2012 12/18 の記事です。

前回、コンソールアプリケーションで Write/Writeln について述べました。
今回は、Read についても紹介したいと思います。

Read は前回の記事でも紹介したように標準入力から値を読み出す関数です。
ただ、前回は Readln; と書いて、開業を待っただけでした。
今回は、きちんと値を読み込んでいます。
非常に簡単で、次のように書くだけです。

01 program Project1;
02  
03 {$APPTYPE CONSOLE}
04  
05 var
06  Str: String;
07 begin
08  Write('文字列を入力してください: ');
09  Readln(Str);
10  Writeln('入力された文字列は "' + Str + '" です');
11  Readln;
12 end.

上記のコード9行目で行を読み込んでいます。
Readln なのでエンターキー(リターンキー)が入力されるまで読み込みます。
たとえば、上の行を Read に変えるとどうなるかというと……

01 program Project1;
02  
03 {$APPTYPE CONSOLE}
04  
05 var
06  Str: String;
07 begin
08  Write('文字列を入力してください: ');
09  Read(Str); // 改行コードまで文字列を読み込むが、改行コード自体は読み込まない
10  Writeln('入力された文字列は "' + Str + '" です');
11  Readln; // 9行目で入力された改行コードをここで読み込むのですぐ終わってしまう
12 end.

一瞬でコンソールが閉じます。
というのも、結局 Read は値を読み込む区切りにエンターキーを利用しています。
上のコメントにあるとおり、改行コードを入れないと文字列の読み込みが終わらないからです。

また、Write/Writeln と同じように複数の値を読み込むこともできます。
複数の値を読み込むには、下記の様にします。

program Project1;
 
{$APPTYPE CONSOLE}
 
var
Str: String;
Int: Integer;
begin
Write('文字列と数値を入力してください: ');
Readln(Str, Int); // こういう入力もできるが、各値を取得するためには改行が必要
Writeln('入力された文字列は "', Str, '" 数値は "', Int, '" です');
Readln;
end.

しかし、コメントにあるとおり、値を1つ確定する毎に改行が必要なので、実行結果はこんな風になります。



ですので、結局 Read を使うときは Readln として、1個1個値を呼んでいくのが良いでしょう。

次回は、いままで紹介した標準入出力をプログラムから変更する方法を紹介します。

0 件のコメント:

コメントを投稿