FreeDOS上にインストールしたFreePascalコンパイラ、約40年ぶりのPascalは忘却の彼方。とりあえずコマンドラインからパラメータを取り込むところを書こうとして止まりました。どうしたら良かったんだっけ。FreePascalはTurbo Pascalに可能な限り合わせてあると。確かにそのつもりでOK。
※実機動作確認には以下を使用しております。
ParamCountとParamStrは業界標準?
大昔のPascalは入出力関係は規定が無く?各処理系でよきに計らえ的な立ち位置であったような、ホントか? コマンドライン引数の処理などはそういう範疇でないかと。しかし、一時とは言えTurbo Pascalが一世を風靡したおかげで現状「使える」Pascal 処理系はTurbo Pascal方式がそのまま使えるものが多いみたいです。Turbo Pascal、事実上の業界標準ってやつだな。
Turbo Pascalに「寄せている」ことを公言?しているFree Pascalは勿論、Gnu様のPascalコンパイラもそうみたい。よって以下が使えますな。
-
- ParamCount、コマンドライン引数の数を返す「関数」
- ParamStr()、引数の番号を与えると引数の文字列を返す「関数」
なおFreePascalのドキュメントを調べていると Linux式の getopt などもサポートされているみたいなので、そっち系が良い場合には使えるみたい。知らんけど。
さて、上記で文字列を貰った後に数字に変えるにはどしたらよいの?
-
- Val(文字列変数、整数戻り変数、エラー戻り変数)
上記が使えるみたい。これは昔のPascalからあったものなのかな?まあ、Turbo Pascalでは使えるみたいなので、これでやってみます。
テスト用のプログラムはこんな感じ。
(* test program for ParamCount, ParamStr *) program parami; var argc : integer; iv : integer; ecode: integer; begin for argc:=1 to ParamCount do begin Val(ParamStr(argc), iv, ecode); writeln('Param(',argc,')=',iv,' ecode=', ecode) end end.
コンパイルして実行
引数は3つ。 123と456はちゃんと数字に変換できたみたい。でもabcは数字に変換できなくて エラーコードが返されているみたい。
予定通りね。