C/400

16. C/400 の SETGT & REDPE

SETLL & READE がわかれば、その逆の SETGT & REDPE も難しくはない。
_Rlocate(fp, &key, key_len, __KEY_GT); によって SETGT を実行して _Rreadk の
__KEY_PREVUNQ__KEY_PREVEQ によってレコードを読み取るだけである。

0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>
0003.00 #include <string.h>
0004.00 #include <recio.h>
0005.00
0006.00 #define TRUE         0
0007.00 #define FALSE       -1
0008.00 #define MAX_LEN 3000
0009.00 #define MAX_KEY_LEN 256
0010.00 
0011.00 void main(void){
0012.00     _RFILE *fp;
0013.00    _RIOFB_T *iofb;
0014.00     char key[MAX_KEY_LEN];
0015.00     unsigned int key_len;
0016.00     char record[128];
0017.00     int i;
0018.00     unsigned long rrn =0;
0019.00
0020.00     if((fp = _Ropen("QTRFIL/LSHOHNS", "rr+ blkrcd=Y")) == NULL){
0021.00        printf("cannot open\n"); return;                                 
0022.00     }                                                                   
0023.00     memset(key, 0, sizeof(key));                                        
0024.00     strcpy(key, "0001");                                                
0025.00     key_len = 4;                                                        
0026.00     _Rlocate(fp, &key, key_len, __KEY_GT);  /*[ SETGT ]*/               
0027.00                                                                         
0028.00     /*[ 以下は REDPE による読み取り ]*/                                 
0029.00   for(i=0; i< 99999; i++){/*for-loop*/                               
0030.00     if(i == 0)                                                          
0031.00       iofb = _Rreadk(fp, record,MAX_LEN, __KEY_PREVUNQ, &key, key_len); 
0032.00     else                                                                
0033.00       iofb = _Rreadk(fp, record,MAX_LEN, __KEY_PREVEQ, &key, key_len);  
0034.00     if(iofb->num_bytes == EOF || iofb->rrn == rrn ||              
0035.00              strncmp(iofb->key, key, key_len) != 0){                 
0036.00        break;                                                           
0037.00     }                                                                   
0038.00        printf("record = %s\n", record);                                 
0039.00        rrn = iofb->rrn;                                              
0040.00     }/*for-loop*/                                                       
0041.00     _Rclose(fp);                                                        
0042.00     getchar(); 
0043.00 }