C/400 であっても外部記述で記述することができる。
RPG で DDS記述がインクルードされて参照することができるのと
同じように C/400 でもユーザーが自分で記述することなく
インクルード記述を利用することができる。
ただし ゾーン10進数の記述はインクルードの定義では
char として定義されているので自分で数値に atoi などで
変換してやる必要がある。
正確なインクルード記述を調べたいのであれば
コンパイル・リストで *PRINT を指定して出力するようにしておき
コンパイル・オプションで *SHOWINC を指定すればよい。
【SAMPLE: TESTEXREC】
0001.00 #include 0002.00 #include 0003.00 #include 0004.00 #include 0005.00 0006.00 #define TRUE 0 0007.00 #define FALSE -1 0008.00 #define MAX_LEN 45 0009.00 /*****************************************/ 0010.00 /* 外部記述ファイルの定義 */ 0011.00 /*****************************************/ 0012.00 #pragma mapinc("shohin", "QTRFIL/SHOHIN(SHOHINR)", "input key", "d",,"" 0013.00 #include "shohin" 0014.00 SHOHINR_i_t shohin_rec; /* SHOHIN レコード・バッファー */ 0015.00 0016.00 void main(void){ 0017.00 _RFILE *fp; 0018.00 _RIOFB_T *iofb; 0019.00 int shtank; 0020.00 char buff[256]; 0021.00 0022.00 printf("** TESTEXREC: 外部記述のレコード単位の読取り **\n"); 0023.00 getchar(); 0024.00 fp = _Ropen("QTRFIL/SHOHIN", "rr"); 0025.00 if(fp == NULL){ 0026.00 printf("Open failed for open file\n");getchar(); 0027.00 } 0028.00 while(1){/*while*/ 0029.00 iofb = _Rreadn(fp, &shohin_rec, MAX_LEN, __DFT); 0030.00 if(iofb->num_bytes == EOF) break; 0031.00 sprintf(buff, "%07.07s", shohin_rec.SHTANK); 0032.00 shtank = atoi(buff); 0033.00 printf("%10.10s %24.24s %7d %04.04s\n", 0034.00 shohin_rec.SHCODE, shohin_rec.SHNAME, shtank, shohin_rec.SHSCOD); 0035.00 }/*while*/ 0036.00 _Rclose(fp); 0037.00 getchar(); 0038.00 }
【解説】
#pragma mapinc("shohin", "QTRFIL/SHOHIN(SHOHINR)", "input key", "d",,""
によってファイル QTRFIL/SHOHIN のレコード名 SHOHINR をキー順に読取ることを
定義しておいて
013.00 #include "shohin"
でインクルードを宣言して
014.00 SHOHINR_i_t shohin_rec; /* SHOHIN レコード・バッファー */
によってインクルードを定義する。
入出力用に定義したいのであれば
SHOHINR_both_t
と定義し、出力用であれば
SHOHINR_o_t
として定義する。
この名前の書き方は一意でありこの形式に従うものとする。
この入出力バッファー SHOHIN_i_t は、コンパイラーによって
次のように定義されている。
typedef struct { char SHCODE[10]; char SHNAME[24]; char SHTANK[7]; char SHSCOD[4]; } SHOHINR_i_t; typedef struct { char SHCODE[10]; } SHOHINR_key_t;
つまり 単価: SHTANK 7S 0 は数字ではなく 7桁の文字列(CHAR)として
定義されている。
従って
0019.00 int shtank; 0020.00 char buff[256] : 0031.00 sprintf(buff, "%07.07s", shohin_rec.SHTANK); 0032.00 shtank = atoi(buff);
の演算による数字としての取出しが必要となる。