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 }
