COBOL |
このページはCOBOLを知っている人あるいは、RPGプログラマーを対象として、
AS/400でのCOBOLを紹介しようとするものです。
COBOLを初歩から解説するものではありません。
ここで紹介するCOBOLはILE−COBOLです。
全般
AS/400のCOBOLは一般のCOBOLとほとんど同じ仕様です。大きく異なるのは、
外部記述を利用する部分だけといってよいでしょう。
AS/400はデータベース・ファイル、画面ファイル、印刷ファイルにそれぞれ多くの情報を持っており、
COBOLでは、これらの情報を取り込み、コンパイルすることができるようになっています。
この部分が他のCOBOLと大きく異なる点です。これは同時にAS/400COBOLの特長でもあります。
4つのDIVISION
一般のCOBOLと同じく、
IDENTIFICATION、 ENVIRONMENNTO、 DATA、 PROCEDURE
です。
引用符(シングルクォーテーション)
AS/400に限らず、IBM系では、引用符はシングルクォーテーションが、主流ですが
COBOLの世界ではダブル・クォーテーションのようです。シングルクォーテーション
を使用してすると、コンパイル時に次のような重大度10の注意を受けます。
「リテラルの区切り文字が正しくない。リテラルは受け入れられます。」
これはエラーではありません。 コンパイル時のオプションでシングル・クォーテーションを
パラメータで指定するか、COBOLソースのの先頭行に、PROCESS ステートメントを
おくことによって、引用符の変更指示ができます。
コンパイルのときは、次のようにOPTIONパラメータで*APOSTを与えます。
CRTBNDCBL PGM(WRKLIB/LM420B) − SRCFILE(WRKLIB/QCBLLESRC) − OPTION(*APOST)
注:行の最後の−(ハイフン)は行の継続を表わします。実際には継続なしで入力できます。
PROCESSステートメントのときは、COBOLソースの先頭行に8桁目から、
PROCESS APOST
と入力します。
プログラムID
ほとんど意味をもちません。ソースファイルのメンバー名が実質のプログラムIDになります。
メンバー名とプログラムIDが異なるとき、重大度10のエラーメッセージがでますが、
コンパイルは通ります。 (コンパイラーは重大度20まではオブジェクトを作成します。)
SOUCE−COMPUTER./OBJECT−COMPUTER.
どんな型式でもOKのようです。(補足、無しでもOKでした)
SPECIAL NAMES.
外部の環境名とプログラム内部の簡略名を関連づけます。
環境名には、次のようなものがあります。(すべてではありません。)
環境名 取得方法、セット方法 内容 I−O−FEEDBACK ACCEPT 入出力の結果の情報 OPEN−FEED−BACK ACCEPT OPEN直後のファイル情報 CONSOLE,SYSTEM−CONSOLE ACCEPT,DISPLAY システム捜査員とのメッセージのやりとり LOCAL−DATA、DATA−AREA ACCEPT,DISPLAY プログラム間をわたるデータのやりとり
ローカル・データ・エリアとユーザー・データ・エリア
ファイルのほかにプログラム間で情報の授受をするためのエリア(オブジェクト)として、データ・エリアがあります。
データ・エリアはレコード1件だけからなるファイルをイメージしてください。
ファイルはREAD/WRITEで入出力を行いますが、データ・エリアはACCEPT/DISPLAYで入出力を行います。
データ・エリアはAS/400のシステムでサポートしているもので、COBOLに特有なものではありません。
ローカル・データ・エリア
ローカル・データ・エリアはジョブ毎に自動的に1個作成される1024バイトのエリアです。
ジョブが終わると自動的に削除されます。
ローカル・データをCOBOLで使用するにはプログラムではSPECIAL NAMES段落で定義をして使用します。
ユーザー・データ・エリア
ユーザー・データ・エリアはCRTDTAARAコマンドで作成されるデータ・エリアで、DLTDTAARAコマンドで
削除するまで存続します。エリア名はファイル名と同様に命名でき、同一ライブラリー中では重複できません。
重複しなければいくつでも作成できます。
ユーザー・データ・エリアはCOBOL/400ではサポートされていません。
ユーザー・データ・エリアをCOBOLで使用するにはプログラムではSPECIAL NAMES段落で定義をして使用します。
以下にローカル・データ・エリアとユーザー・データ・エリアの例を示します。
ここではユーザー・データ・エリアは「USRUDA」の名前で以下のように定義されているものとします。
CRTDTAARA DTAARA(WRKLIB/USRUDA) TYPE(*CHAR) LEN(30)
PROCESS APOST GRAPHIC IDENTIFICATION DIVISION. PROGRAM-ID. T1ARA. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-AS400. OBJECT-COMPUTER. IBM-AS400. SPECIAL-NAMES. LOCAL-DATA IS L-ARA DATA-AREA IS U-ARA. DATA DIVISION. *--------------------------------------------------------------- WORKING-STORAGE SECTION. * ローカル・データ・エリア 01 L-ARA-W. 03 L-FLD01 PIC X(10) VALUE SPACE. 03 L-FLD02 PIC X(05) VALUE SPACE. * ユーザー・データ・エリア 01 U-ARA-W. 03 U-FLD01 PIC X(10) VALUE SPACE. 03 U-FLD02 PIC X(05) VALUE SPACE. 03 U-FLD03 PIC X(15) VALUE SPACE. *--------------------------------------------------------------- PROCEDURE DIVISION. TTT-MAIN. ACCEPT L-ARA-W FROM L-ARA. ACCEPT U-ARA-W FROM U-ARA FOR 'USRUDA'. * ローカル・データ・エリア MOVE '1111122222' TO L-FLD01. MOVE '33333' TO L-FLD02. * ユーザー・データ・エリア MOVE '4444455555' TO U-FLD01. MOVE '66666' TO U-FLD02. MOVE '777778888899999' TO U-FLD03. DISPLAY L-ARA-W UPON L-ARA. DISPLAY U-ARA-W UPON U-ARA FOR 'USRUDA' GOBACK.
SELECT文
SELECT文では外部ファイル名は、原則として外部の実体名と一致させます。
実体としては、データベースファイル、 印刷ファイル、画面ファイルなどがあります。
SELECT FILE1 ASSIGN TO 装置−外部ファイル名
例えば、FILE1が外部の物理ファイルのM420であるときは、次のようになります
SELECT FILE1 EB10 ASSIGN TO DATABASE−M420
外部ファイル名と実体名が異なるときは、CLのOVRDBF、OVRDSPF、
OVRPRTFなどのコマンドで以下のように、一時変更できます。
OVRDBF FILE(ファイル名) TOFILE(ライブラリー/実体名)
例:
OVRDBF FILE(M420) TOFILE(WRKLIB/M420A)
関連づけられる外部のファイルの種類と装置の関係は下図のとおりです。
関連づけられるファイル 装置 物理、論理ファイル DATABASE 外部記述の印刷ファイル FORMATFILE(注−1) プログラム記述の印刷ファイル PRINTER(注−2) 画面ファイル WORKSTATION
注−1:外部記述の印刷ファイルを使用するときは、下図のようになります。
SELECT FILE1 ASSIGN FORMATFILE-LM420P ORGANIZATION SEQUENTIAL.
注−2:プログラム記述の場合は、通常のCOBOLの様式でFD項目を記述します。
外部記述のキー
外部記述のデータベースファイルのキーをレコードキーに使用するときは、予約語の
EXTERNALLY−DESCRIBED−KEYを使用します。
RECORD KEY EXTERNALLY−DESCRIBED−KEY
データベースファイルのSELECT文のサンプルを下図に示します。
*印刷対象ファイル 得意先マスター SELECT FILE2 ASSIGN DATABASE-M420L02 ACCESS MODE SEQUENTIAL RECORD KEY EXTERNALLY-DESCRIBED-KEY WITH DUPLICATES ORGANIZATION INDEXED.
印刷ファイルの場合
印刷ファイルの外部記述を使用する場合は、FORMATFILEが必要です。(下図参照)
このとき、WRITEにADVANCING句は使用できません。
* 印刷ファイル ↓外部記述のとき SELECT FILE1 ASSIGN FORMATFILE-LM420P ORGANIZATION SEQUENTIAL.
重複キー
論理ファイルの場合は、重複キーありのケースが多いですが、このような場合は、SELECTに、
WITH DUPLICATESが必要です。
これを忘れると、コンパイルはとおりますが、OPENのときにファイル状況「95」のエラーになります。
(注:WITH DUPLICATESはAS/400に特有のものという訳ではありません。)
ファイルステータス
ファイル・ステータスは一般のCOBOLと同様に使用できます。
WORKING−STORAGE SECTIONに、ステータス用の2桁の文字列変数を
用意して使用します。
ただし、ここでは、RPGプログラマーに馴染みの深い、(あるいはAS/400らしい)
標識を使った方法をとりあげることにします。
FD項目におけるLABEL RECORD,BLOCK CONTAINS
FD項目におけるLABEL RECORD,BLOCK CONTAINSは、AS/400では
意味を持ちません。AS/400では、主記憶装置と外部記憶装置との間のデータ
転送は、全てシステムがページングの一環としてコントロールを持っているからです。
FD LPFL LABEL RECORD IS STANDARD BLOCK CONTAINS 0 RECORDS
BLOCK CONTAINS 0 RECORDSは、重大度20のメッセージが表示されます。
コンパイルは行われます。
FD項目での外部ファイル情報のCOPY
一般のCOBOLと同様に、COPYが使用できます。
特に指定しなければ、COPYのソース・ファイル名はQLBLSRCが想定されます。
DDSで記述された外部情報を、COPYして利用するためには、以下のように予約語の、
DDS−ALL−FORMATSを使用します。
COPY DDS−ALL−FORMATS OF 外部ファイル名
例:FD項目でファイルM420の外部記述を利用する場合は、下図のようになります。
FD FILE1. 01 FILE1R. COPY DDS-ALL-FORMATS OF M420.
これによって、コンパイルのときファイルM420の様式が、PICTURE定義として展開されます。
01レベルのレコード名(上の例ではFILE2R)は自由につけられます。
外部記述の印刷ファイルの情報をCOPYする場合も同様で、下図のようになります。
FD FILE2. 01 FILE2R. COPY DDS−ALL−FORMATS OF LM420P.
注意すべきは、印刷ファイルLM420Pが見出しと明細のように、様式を複数もつ場合で、
このとき、それらの様式は同じ場所(アドレス)に、REDEFINEされて定義されます。
即ち、明細にデータをセットすると、見出しの内容がこわされるなどの現象がでてくるので、
そのための対策が必要になります。画面ファイルの場合も同様です。
従来のCOPY
これは一般のCOBOLと同じです。コピーメンバーの省略時のソースファイルはQLBLSRCです。
もし、そこでメンバーがみつからないときは、COBOLプログラムの入っているソースファイルを探しにいきます。
COPY命令は、PROCEDURE DIVISIONでも使用できます。
WORKING−STORAGE SECTION.
通常のCOBOLと同様です。ここでも従来型のCOPY句のほかに、外部記述のCOPYが使用できます。
標識
COBOLでの標識は、長さ1のビット列として定義します。(下図参照)
RPGでの標識*INnn(nnは01〜99)は、COBOLではINnnのようになります。
* プログラムで使用する標識(及び定数)を定義します。 01 CONST. 03 Z-ON PIC 1 VALUE B'1'. 03 Z-OFF PIC 1 VALUE B'0'. 03 IN99 PIC 1 VALUE B'0'.
ビット列の定数、B’1’,B’0’はコーディングのとき、キーストロークが面倒なので、
上例のように変数(例:Z−ON,Z−OFF)の形で定義しておくのが便利です。
先のCOPY句で取得した場合の標識も INnnの形で定義されます。(下図参照)
20 002600 FD FILE1. 21 002700 01 FILE1R. 002800 COPY DDS-ALL-FORMATS OF LM420P. 22 +000001 05 LM420P-RECORD PIC X(95). +000002* I-O FORMAT:HDR01 FROM FILE LM420P OF LIBRARY +000003* 見出部様式 +000004* 05 HDR01 REDEFINES LM420P-RECORD. +000005* INPUT FORMAT:DTL01 FROM FILE LM420P OF LIBRARY +000006* 明細部様式 +000007* 05 DTL01-I REDEFINES LM420P-RECORD. +000008* OUTPUT FORMAT:DTL01 FROM FILE LM420P OF LIBRARY +000009* 明細部様式 23 +000010 05 DTL01-O REDEFINES LM420P-RECORD. 24 +000011 06 DTL01-O-INDIC. 25 +000012 07 IN11 PIC 1 INDIC 11. 26 +000013 06 P1TKNO PIC X(5).
漢字データ
漢字データは2バイトで1文字を表わし、IBM系では、16進数の0E,0Fのシフト
コードで区切られた文字列です。
国産系ではこのシフトコード(0E,0F)がそれぞれ2バイトになっている場合がある
ので、互換性において注意が必要です。また、パソコン系では、2バイトの先頭の1ビットが
オンかオフで漢字であるかどうかを区別しています。
従って、パソコンから変換するようなときは、データベースや画面、印刷帳票などのレイ
アウトの桁ずれなどに注意が必要です。
国産機にみられる2バイト文字の記述「NC」は、AS/400では「N」となります。
01 AAA. 03 AAAA PIC NC(05) VALUE NC' あいうえお '. ↓ 01 AAA. 03 AAAA PIC N(05) VALUE N' あいうえお '.
同様に「NA」も「N」となります。
MOVE NA"2" TO HD-12 ↓ MOVE N" 2 " TO HD-12
算術数値の有効桁数
ILE−COBOLでは18桁が最大です。つまり、
01 PIC S9(n)V9(d) COMP−3.
のとき、n+dの最大が18桁です。
S9(19)とすると、SEUの段階で文法チェックのエラーに
なります。(RPGでも最大31桁です)
注:同じILE−COBOLであっても、OSのバージョンによっては最大有効桁数が31の場合もあります。
倍精度浮動小数点数
FORTRANでのREAL*4相当のCOMP−1,REAL*8相当のCOMP−2が使用できます。
SCREEN SECTION
AS/400のCOBOLではSCREEN SECTIONは使用できません。
特にパソコン系からのCOBOLプログラムを変換するときは、大幅なワークロードの見積ちがいが
発生する可能性があります。要注意です。
LINKAGE SECTION
一般COBOLと同じです。
二次ENTRY
AS/400のCOBOLでは、二次ENTRYは使用できません。解決策として、二次ENTRY用として、
プログラムを呼び出すだけの小さなプログラムを、CL、または、COBOLで作成しておけばよいでしょう。
下図はCLの例です。このCLを二次ENTRY名で作成します。
PGM CALL PGM(プログラム名) ENDPGM
呼出のパラメータがある場合は、そのためのPARMパラメータや、変数名定義のDCLの
記述も必要です。
段落
SECTIONとして定義していなくても、段落から次の段落の前までを、ひとつの内部
サブルーチンのように、使用できます。これはAS/400−COBOLに特有なものと
いうわけではありません。(これはRPGプログラマー向けの説明です。)
繰返し処理
PERFORM XXX UNTIL A = B.の形のとき、UNTILの語句があっても、
実際はWHILEの場合と同様にチェックされます。すなわち、UNTILの場合は繰返し
が最低1回は実行されますが、COBOLの場合は条件が合わないと1度も実行される
ことはありません。なまじ、UNTILとあるだけに紛らわしいわけです。
明示的にコーディングすれば、勘違いをさけられます。
明示的にUNTIL型の繰返しにするためには、
PERFORM SUB-MAIN WITH TEST AFTER UNTIL IN99 = Z-ON.
のように、WITH TEST AFTERを使用します。
参考:
PERFORM SUB-MAIN WITH TEST BEFORE UNTIL IN99 = Z-ON.
読取の位置づけ
データベース読取の位置づけはSTART命令で行います。
RPGでのSETLL,SETGTに相当します。
START命令でファイルが0件データの場合、状況コード23のエラーになります。
INVALID KEYをつければこのエラー発生はさけられます。(下図参照)
START FILE2 KEY NOT LESS THAN EXTERNALLY-DESCRIBED-KEY INVALID KEY MOVE Z-ON TO IN99. * ↑0件のときは INVALID KEY
READ−EQUAL
指定されたキーと同じ値のキーを持つレコードを読みとりする、RPGのREADEもどきの処
理を実現するためには、内部ルーチンの形にしておくのが便利です。(下図参照)
このとき、標識はシステムでなく、プログラムでON/OFFする必要があります。
* 指定キーと同一キーを持つレコードを読取りする。 (READ-EQ) SB-READ-EQ. IF IN99 = Z-OFF READ FILE2 NEXT RECORD AT END MOVE Z-ON TO IN99 END-READ IF TKSLNO NOT = W-SLNO MOVE Z-ON TO IN99 END-IF END-IF.
外部記述の印刷ファイルに出力
外部記述の印刷ファイルに出力するときは、FORMAT句でどの様式による出力を行う
かを指定します。
このとき、その様式の記述がたとえ何行分であっても、1回の出力(WRITE)で印刷
されます。
- 明細部の出力の例
- WRITE FILE1R FORMAT 'DTL01'.
- 見出し部の出力の例
- WRITE FILE1R FORMAT 'HDR01'.
フィールド印刷の標識制御
条件に応じてのとき、**のようなマークの印刷するようなとき、それを標識で制御して
いるような場合に、注意しないとその定数項目をオフしたとき、それに付属のSPACEA(1)の
ような改行制御も、同時にオフとしてしまうことになります。
A P1URGK 11S 0 +8TEXT(' 売上実績額 ') A EDTCDE(K) A 11 +2 '**' A SPACEA(1)
IF TKURJS > 10000 MOVE Z-ON TO IN11 ELSE MOVE Z-OFF TO IN11 END-IF.
この例では、実績額が10,000円を超えた場合に、標識11をオンにして’**’を
印刷させています(下図参照)。10,000円を超えない場合は標識11はオフになり、
’**’の印刷はしません。が、同時に、付属のSPACEA(1)も有効でなくなるので、
改行がおかしくなります。
このようなときは、’**’またはブランクを変数に入れて印刷するようにするか、ブラ
ンクを印刷するような、ダミーのフィールドにSPACEA(1)を付属させるなどの工夫が必要です。
..8....+....9....+....0....+....1....+....2....+....3.. 0/04/24 15:11:51 PAGE. 0001
TEL 担当営業 売上実績 MK 03-3333-1122 3333 212,000 ** 03-3333-1166 3333 16,000 ** ↑ **にSPACEA(1)が付属しています。 **が標識で無効になるとSPACEA(1)も無効になります。 この結果、改行が意図どおりに行われなくなります。
印刷制御の考慮事項
プログラムの中で、「タイトルを1行印刷したなら、何行改行して、項目を見出しを2行にわたって印刷して、
さらに仕切りの線をひいてとか、明細は3行で1明細にして」、のようなレイアウトに関する処理は、プログラムの
本質的な部分からはずれるだけでなく、このための制御によってプログラムが複雑になりがちです。
印刷ファイルはレイアウトの情報をできるだけ、プログラムから印刷ファイルに移すものです。
印刷ファイルを使用すると、多少印刷出力のレイアウトに変更があっても、プログラムロジックの修正が殆ど
必要なく、プログラムのリコンパイルだけですむことが多いので、プログラム作成の効率がアップします。
プログラムの移植の場合は別として、新規にプログラムを作成する場合は、印刷ファイルをできるだけ使用する
のが得策です。
また、RLUというユーティリティを使用すると、印刷設計レイアウトも簡単に作成できるので、設計文書の作成も
楽になります。RLUはPDMのメンバーの処理で、19番のオプションを使用すると呼び出しできます。
ファイルの編成とアクセス
ファイルの編成とSELECT文での指定の方法は次のとおりです。
順次ファイル 相対ファイル 索引付ファイル 例 印刷ファイル
TAPEキーの無いPF キーのあるPF、LF DDSでのキー指定 なし ない あり ORGANAIZATION SEQUENTIAL RELATIVE INEXED ACCESS MODE SEQUENTIAL RANDOM
DYNAMICRANDOM
DYNAMICRECORD KEY −− −− キー名
注:索引付ファイルのORGANIZATION, ACCESS MODEを共に
SEQUENTIALとするとRRN順に読めてきます。
索引付ファイルの更新の例:
得意先マスター(M420)を更新しています。
SELECT FILE1 ASSIGN DATABASE-M420 ACCESS MODE RANDOM RECORD KEY TKTKNO ORGANIZATION INDEXED. 中略 * ファイル更新処理 SB-0000. * キーに値をセットして読み込みします。 MOVE S1TKNO OF FMT01-I TO TKTKNO. MOVE X-OFF TO IN99. READ FILE1 RECORD INVALID KEY MOVE X-ON TO IN99. * 削除処理でなければ、編集処理をします。 IF W-MOD NOT = 04 MOVE S1NMKJ OF FMT02-I TO TKTKNO MOVE S1NMKN OF FMT02-I TO TKNMKJ MOVE S1TEL OF FMT02-I TO TKTEL MOVE S1SLNO OF FMT02-I TO TKSLNO END-IF. * 読めていれば、置換え、そうでなければレコード追加、 * 更新モードでなければ削除を行います。 IF IN99 = X-OFF IF W-MOD = 02 REWRITE FILE1R ELSE DELETE FILE1 END-IF ELSE WRITE FILE1R END-IF.
プロシージャー呼出し
ILEの特長であるバインドのための呼出がプロシージャー呼出として機能が追加されています。
バインド予定のプロシージャーを次のように呼出します。
CALL LINKAGE TYPE IS PROCEDURE 'TESTCB1' USING A B C D.
数学関数
ILE−COBOLでは、SIN,COS,TANなど簡単な数学関数が使用できます。
可変長レコードの操作
AS/400では基本的にはレコードは固定長ですが、可変長レコードを扱うときは、
FDのところで、VARYINGの記述をし、可変長レコードと定義します。
FD ファイル名
RECORD IS VARYING IN SIZE FROM 最小サイズ TO 最大サイズ
DEPENDING ON レコード長の識別名.
レコード長の識別名は、WORKING-STORAGE SECTIONで定義しておきます。
レコード出力プログラムのサンプルを紹介します。
IDENTIFICATION DIVISION. PROGRAM-ID. CBL401. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-I5. OBJECT-COMPUTER. IBM-I5. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SYS010 ASSIGN TO DISK-FILE1 ACCESS MODE SEQUENTIAL FILE STATUS FILE-STS. DATA DIVISION. FILE SECTION. FD SYS010 RECORD IS VARYING IN SIZE FROM 10 TO 80 DEPENDING ON REC-LEN. 01 REC1. 03 FILLER PIC X(10). 01 REC9. 03 FILLER PIC X(80). WORKING-STORAGE SECTION. 01 FILE-STS PIC X(2). 77 REC-LEN PIC 9(5). 01 WRK. 03 WRK10 PIC X(10). 03 WRK20 PIC X(20). 03 WRK30 PIC X(30). PROCEDURE DIVISION. AA. OPEN OUTPUT SYS010. MOVE 'AAAAAAAAAA' TO REC9. MOVE 10 TO REC-LEN. WRITE REC9. MOVE 'BBBBBBBBBBBBBBBBBBBB' TO REC9. MOVE 20 TO REC-LEN. WRITE REC9. MOVE 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC' TO REC9. MOVE 30 TO REC-LEN. WRITE REC9. CLOSE SYS010. GOBACK.
可変長の読み取り
出力の場合と同様に定義し、読み取りします。
FDで記述したフィールドに長さ情報がセットされます。
IDENTIFICATION DIVISION. PROGRAM-ID. CBL402. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-I5. OBJECT-COMPUTER. IBM-I5. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SYS010 ASSIGN TO DISK-FILE1 ACCESS MODE SEQUENTIAL FILE STATUS FILE-STS. DATA DIVISION. FILE SECTION. FD SYS010 RECORD IS VARYING IN SIZE FROM 10 TO 80 DEPENDING ON REC-LEN. 01 REC1. 03 FILLER PIC X(10). 01 REC9. 03 FILLER PIC X(80). WORKING-STORAGE SECTION. 01 FILE-STS PIC X(2). 77 REC-LEN PIC 9(5). 01 WRK. 03 WRK-LEN PIC 9(5). 03 WRK40 PIC X(40). PROCEDURE DIVISION. AA. OPEN INPUT SYS010. READ SYS010. MOVE REC-LEN TO WRK-LEN. MOVE REC9 TO WRK40. DISPLAY WRK. READ SYS010. MOVE REC-LEN TO WRK-LEN. MOVE REC9 TO WRK40. DISPLAY WRK. READ SYS010. MOVE REC-LEN TO WRK-LEN. MOVE REC9 TO WRK40. DISPLAY WRK. CLOSE SYS010. GOBACK.
次ページ 目 次
(C)COPYRIGHT ISHIOKA KATSUHIDE 2000−2008