▼ メニュー ▼

- Q&A集です。
## 古い情報のため最新の情報と相違があるかも知れません ##
Last updated
1999/12/06 18:15
- 言語系 -

Q: CLでの例外処理の方法は?
登録日: 1999/12/06 修正日: ----/--/--

A: 例を参考にして下さい。

例) 例外処理を参照。

パラメータに存在するライブラリーと存在しないライブラリーを設定して実行してみて下さい。
[パターン1]
&LIB1にQSYS、&LIB2にXXXLIB(存在しないものとします)
実行結果は"ライブラリー  XXXLIB  が見つかりません。"

[パターン2]
&LIB1にXXXLIB(存在しないものとします)、&LIB2にQSYS
実行結果は"ライブラリー *LIBL にオブジェクト XXXXLIB が見つからない。"

パターン2が例外処理になっています。最初のCHKOBJでMONMSGが設定されていませんがプログラムがアベンドすることはありません。

補)
例のようにプログラム処理の直前でMONMSGにより監視したいメッセージIDを設定します。このプログラムはCPF0000を設定しているのでアベンドすることはありません。もちろんCPF0000ではなくてもよいです。また複数のメッセージIDを設定して監視することも可能です。まあ、例のようにCPF0000で監視したほうが汎用的でしょう。


Q: バッチに投入したプログラムをデバッグするには?
登録日: 1999/12/02 修正日: 1999/12/06

A: STRSRVJOBコマンドを使用します。

手順)
[1] 保留状態でJOBQにジョブを投入。
SBMJOB CMD(CALL PGM(MyPGM)) HOLD(*YES)


[2] WRKSBMJOBなどを使用して投入したジョブのジョブ番号を調べる。


[3] STRSRVJOBを実行する。
STRSRVJOB JOB(JobNo/User/JobName)

[4] STRDBGを実行する。
STRDBG PGM(MyPGM)
ここでブレイクポイントを設定するなどします。

[5] 保留状態のジョブを開放して下さい。
RLSJOB JOB(JobNo/User/JobName)
ここでブレイクポイントを設定するなどします。
RLSJOBを行うと画面が切り替わりますのでそこでF10を押してADDBKPやDSPMODSRCを行ってブレイクポイントを設定して下さい。OPM(ILEプログラムでない)プログラムでDSPMODSRCを行う場合はそのプログラムのコンパイル時にOPTION(*SRCDBG)を入れて下さい。


[6] プログラムをデバッグして下さい。(対話型と同様に)

[7] デバッグを完了したらENDDBG、ENDSRVJOBを実行する。

上記の7つの手続きでバッチ投入したプログラムのデバッグをしましょう。


Q: プログラムでOSのバージョンを検索するには?
登録日: 1999/06/22 修正日: ----/--/--

A: CEEGPIDを使用します。

厳密にはILEのバージョンですがほぼOSのバージョンに相当するでしょう。

ILE RPGサンプル

補)
サンプルをコンパイルするときはCRTBNDRPGの省略時の活動化グループを*NOにします。
CRTBNDRPG PGM(TESTLIB/SAMPLE) SRCFILE(TESTLIB/QRPGLESRC) DFTACTGRP(*NO)

CEExxxxについてはAS/400 システムAPI解説書に記載されています。


Q: 日付から曜日を求めるには?(CEEDAYS, CEEDYWKの使用方法)
登録日: 1999/06/22 修正日: ----/--/--

A: ILE RPGサンプルを参照。(CEExxxxのAPIはILE RPG, ILE COBOL, ILE Cからしか呼び出せないようです)

ILE RPGサンプル

このサンプルプログラムに19990622をパラメータとして渡すとTuesdayが表示されます。

[解説]
上記サンプルのようにまずCEEDAYSで日付をリリアン日付に変換します。そのリリアン日付をもとにCEEDYWKを使用し曜日を求めます。(1は日曜日、2は月曜日、・・・、7は土曜日を示しています)

ま、試してみて下さいな。

補)
上記サンプルをコンパイルするときはCRTBNDRPGの省略時の活動化グループを*NOにします。
CRTBNDRPG PGM(TESTLIB/SAMPLE) SRCFILE(TESTLIB/QRPGLESRC) DFTACTGRP(*NO)

CEExxxxについてはAS/400 システムAPI解説書に記載されています。


Q: RPGプログラムの『10進データ・エラーの無視』が*YESか*NOか判別するには?
登録日: 1999/01/12 修正日: ----/--/--

A: STRDBGを使用します。

実際に確認するための方法はデバッグを行うことです。

STRDBG PGM(YOURPGM)
ADDBKP STMT(任意のステートメント)
CALL PGM(YOURPGM)

停止点でプログラムが停止したらDSPPGMVAR ZIGNDECDを見て下さい。
ZIGNDECDの値
0 : 10進データ・エラーの無視が*NOとしてプログラムがコンパイルされています。
1 : 10進データ・エラーの無視が*YESとしてプログラムがコンパイルされています。


Q: CLでシステム日付を8桁で取得する方法は?
登録日: 1998/12/22 修正日: 1999/08/20

A: CVTDATを使用しましょう。

例)
DCL VAR(&DATE_IN) TYPE(*CHAR) LEN(6)
DCL VAR(&DATE_FMT) TYPE(*CHAR) LEN(4)
DCL VAR(&DATE_OUT) TYPE(*CHAR) LEN(11)

RTVJOBA DATE(&DATE_IN) DATFMT(&DATE_FMT)

CVTDAT DATE(&DATE_IN) TOVAR(&DATE_OUT) FROMFMT(&DATE_FMT) TOFMT(*YYMD) TOSEP(/)

ここでJOB日付が981222だとすると結果は1998/12/22となります。
(TOSEPを*NONEにすれば19981222となります)

セパレーターを追加してくれるのはちょっとうれしいかも?


Q: 画面のDATEキーワードを8桁(YYYYMMDD)にするには?
登録日: 1998/11/17 修正日: ----/--/--

A: V4R2からDATE(*YY)キーワードが使用できます。

画面DDSキーワードにDATE(*YY)と指定して下さい。さらに編集コードをYにするとYYYY-MM-DDの形式で表示されます。

補)
V4R1まではプログラムで8桁日付を転送するしかありません。


Q: CL実行中などにメッセージ行に状況メッセージをだすには?
登録日: 1998/10/15 修正日: ----/--/--

A: SNDPGMMSG MSGTYPE(*STATUS)を使用します。

MSGTYPE(*STATUS)を使用するにはメッセージファイルの指定が必須なのでメッセージファイルQCPFMSGのCPF9898を利用しましょう。
(CPF9898は汎用メッセージID)

例)
CHGVAR VAR(&MESSAGE) VALUE('YOUR MESSAGE')
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA(&MESSAGE) TOPGMQ(*EXT) MSGTYPE(*STATUS)


補)
Toys/400のDSPMSGIDはMSGTYPE(*STATUS)を使用しています。


Q: コマンドラインからCL PGMに数字タイプのパラメータを渡すことはできますか?
登録日: 1998/10/06 修正日: ----/--/--

A: 可能です。

例) TESTCL
PGM PARM(&NUM)
DCL VAR(&NUM) TYPE(*DEC) LEN(6 0)
DCL VAR(&MESSAGE) TYPE(*CHAR) LEN(10)
CHGVAR VAR(&MESSAGE) VALUE(&NUM)
SNDPGMMSG MSG(&MESSAGE)
ENDPGM

上記のCLをコマンドラインから次のようにCALLします。
CALL TESTCL PARM(X'0981015F')
このように16進表記で数字パラメータを渡す必要があります。
(マイナスの場合は最後のFをDにする)


Q: RPGソースをILE RPGソースに変更するには?
登録日: 1998/10/06 修正日: ----/--/--

A: CVTRPGSRCを使用して下さい。

例)
CVTRPGSRC FROMFILE(MyLIB/MySRC) FROMMBR(MyMBR) TOFILE(MyLIB/MyILESRC) TOMBR(MyILEMBR)


Q: QDCXLATEでJISコードの漢字をEBCDICに変換できますか?
登録日: 1998/10/02 修正日: ----/--/--

A: 残念ながらできません。

QDCXLATEはSJISコードの漢字からEBCDICには変換可能です。


Q: C言語用のstdioのヘッダーファイルはどこ?
登録日: 1998/09/30 修正日: ----/--/--

A: QCLEライブラリーにあります。

QCLEのHソースファイルにSTDIOというメンバーで提供されています。

Cでプログラムを書くときは#include <stdio>でインクルードされます。

[参考]
socketヘッダーファイル等はQSYSINCライブラリーにあります。

QSYSINCライブラリーはOS/400のオプションとなっています。
DSPSFWRSCで表示すると「OS/400 - システム開放型インクルード」
GO LICPGMの10で表示すると「OS/400 - システム・オープンの組込み」
(バージョンによって呼び名が違う可能性があります)

必要ならば導入しましょう。


Q: 画面内のカーソル移動の順番を制御できますか?
登録日: 1998/09/22 修正日: ----/--/--

A: FLDCSRPRGを使用すれば可能です。

通常、画面内のカーソル移動は「左から右、上から下」ですが、これを制御することができます。

フィールドレベルキーワードのFLDCSRPRGを使用することによって、フィールド入力後、次に移動すべきフィールドを指定することが可能です。

例) FLDCSRPRGを参照。

画面上の動き
(FLD01→02→03→04→05→11→12→13→14→15となります)

presented by OnBeDo
HOMEに戻る