コマンドDSPDは、Display Dataの略です。ネーミングにもっと一ひねりしたかった。誕生は、System38の上でした。今はバージョン8です。
機能の概説(売り)
- これにより、物理ファイルと論理ファイルのデータを表示します。
- 結合論理ファイル(Join file)の表示できます。
- 文字は、DBCS ; Double Byte Character String , SBCS ; Single Byte Character Stringに対応しています。
- 数字は、ゾーン、パック、バイナリに対応しています。通常の小数点表示できます。
- 数字は、必ず符号表示しています。もし符号がおかしい場合、(RPGでデシマルエラーとなるはず)は、符号は「?」の表示になります。
- ここでの例は、到着順ですが、もちろんキー付き検索も可能です。この場合、キーに漢字やパックが入っているときは、16進数の指定になります(手抜き)。
- フィールドリスト(F4)やデータリスト表示(F11)も可能です。この2つは、相互に関連して、フィールドリストで選択したもの(10個まで)は、データリストで出てきます。但し、一画面に収まる範囲です。また、データリストには、キーとなるデータが必ず出ます。
- F22で、表示中のデータの16進数ダンプリストが出ます。このときプリンターファイルQPRT198が必要です。CPI15で長さ198です。
できないこと
プログラム構成
オブジェクト名 |
タイプ、属性 |
内容 |
DSPD |
CMD |
CPP※はDSPDR8C |
DSPDR8C |
CLP |
DSPDR8の起動準備 |
DSPDR8 |
RPG |
本体 |
DSPDR8D |
DSPF |
本体の画面ファイル |
DSPDR81 |
RPG |
フィールド情報画面 |
DSPDR81D |
DSPF |
DSPDR82 |
RPG |
データリスト画面 |
DSPDR82D |
DSPF |
DSPMBRL |
RPG |
メンバー選択画面 |
DSPMBRLD |
DSPF |
SZAPSB2 |
RPG |
印刷プログラム(スナップショット) |
※CPPとは、Command Process Programのことで、早い話、コマンドに定義されるプログラムのことです。
ロジック
最初は、DSPFFDと、DSPFD *ACCPTHのOUTFILEでやってましたが、DSPFFDをAPIに置き換えたら、劇的に速くなりました。ただし、*ACCPTHはまだ、OUTFILEのままです。
指定したファイルから、一件読み出して、配列にセットして、フィールド情報から、フィールド単位にまとめて、前後に表示属性をつけて、サブファイルにセットして、表示する。漢字は分解されても、0e0fが壊れないように0e0fを埋め込んでいますが、最初から壊れたデータはテストしたことありません。
画面サンプル
DSPD + [F4]
- File Nameは検索したいファイル名。
- Member nameは検索したいメンバー名。*SELECTにすると、メンバー選択画面が出ます。
- Indexedはキー付きファイルを到着順に見たい場合に指定します。キー付き物理ファイルのことです。
ここから以下は、初期画面の表示形式の指定です。機能キーで変わります。
- Textはデータの前につけるテキストの指定。
- One filed per one line は、一行一フィールド表示です。
- Zero Suppressは数字の表示のゼロサプレスです。
- Display attribute of fields ファイルの属性表示です。
あまり使わないパラメータです。
- Use DBCS character DBCS表示ルーチンの有効/無効です。無効だと速いはずですが、有効のままで気になったことありません。
以下のように(赤字の部分)、DSPDR8Cを修正してください。また、DDMFをみたい場合は、メンバーに*SELECTは指定しないでください。
/* QPRT198 */
CHKOBJ QTEMP/QPRT198 *FILE
MONMSG CPF9800 *N +
CRTPRTF QTEMP/QPRT198 IGCDTA(*YES) PAGESIZE(66 198) CPI(15)
OVRPRTF QPRT198 QTEMP/QPRT198
/* CHECK EXISTENCE OF MEMBER IN THE FILE */
IF (&SYSTEM='*LCL') CHKOBJ &FLIB/&FILE *FILE &MBR
ELSE CHKOBJ &FLIB/&FILE *FILE
/* SET RECORD-FORMAT INFORMATION INTO USER SPACE */
CALL QUSLRCD (&USRSPC 'RCDL0100' &FILLIB '0')
|
画面サンプル
[初期画面(F13)] データのみ(上記コマンドの省略値)
[F6] カラムヘディング
[F7] テキスト
[F8]フィールド名
[F9] テキスト+フィールド名
[F10] カラムヘディング+フィールド名
[F4]
フィールドリスト(ここで選択すると、データ表示画面では、高輝度になり、F11でそのフィールドが出てきます。)
[F11] データリスト(キー項目は、必ず出ます。F4で選択したフィールドのデータが出ます。この画面の左端に何か入力すると、選択されます。でも、重複キーでは、うまく動きません。)
[F14] 1行1データ表示
[F15] データ属性表示
|