HP 3000 Manuals

READING A KSAM FILE IN KEY ORDER [ KSAM/3000 Reference Manual ] MPE/iX 5.0 Documentation


KSAM/3000 Reference Manual

READING A KSAM FILE IN KEY ORDER 

PRIMARY KEY SEQUENCE 

Reading a file in primary key order requires no other preparation than to
open the file (file system) or to open the file for sequential input
(COBOL). In the file system, sequential logical read is the default and
the aoptions parameter can be omitted from the FOPEN call.  In a COBOL
procedure, input type and sequential access are indicated by zero values
in the appropriate words of the filetable table.

Once opened for input, the file system FREAD intrinsic or the COBOL
CKREAD procedure can be called to read the file in sequence by primary
key.

ALTERNATE KEY SEQUENCE 

To read a file in sequence by an alternate key, that alternate key must
be specified in a call prior to the call to a read procedure or
intrinsic.  In COBOL, you would use a call to CKSTART; with the file
system intrinsics you would use FFINDBYKEY.

The example in Figure 5-3 illustrates use of the file system intrinsics
FREAD and FFINDBYKEY to read a KSAM file in sequence first by primary key
and then by alternate key.

RANDOM ORDER 

A particular record in the file can be selected for access according to
the value of a key field in the record.  This can be a primary or
alternate key field.  In COBOL, a call to CKREADBYKEY reads a record
specified by the key value parameters.  The file system uses the
intrinsic FREADBYKEY for the same purpose.  The main difference here is
that the file must be opened for random access before calling the COBOL
procedure; no distinction is made by the MPE file system between a file
opened for sequential access and one opened for random access.
___________________________________________________________________
|                                                                 |
|     C*****************************************************      |
|     C                        EXAMPL2                     *      |
|     C                  READ KSAM FILE SEQUENTIALLY       *      |
|     C*****************************************************      |
|              SYSTEM INTRINSIC FOPEN,FCLOSE,FWRITE,FERRMSG,FCHECK|
|              SYSTEM INTRINSIC FWREAD,FFINDBYKEY                 |
|              INTEGER FILNUM                                     |
|              CHARACTER FILENAME*10                              |
|              CHARACTER OUTPUT*72                                |
|              CHARACTER MESSAGE(72)                              |
|              LOGICAL INPUT (36)                                 |
|              LOGICAL MESSAGEW(36)                               |
|              EQUIVALENCE (MESSAGE,MESSAGEW)                     |
|              EQUIVALLNCE (OUTPUT,INPUT)                         |
|              CHARACTER KEYVAL*8                                 |
|              DATA FILENAME/"FEXAMFIL " /                        |
|              DATA KEYVAL/"000-0000"/                            |
|     C*****************************************************      |
|     C             OPEN KSAM FILE FOR INPUT               *      |
|     C*****************************************************      |
|              FILNUM=FOPEN(FILENAME,%7L)                         |
|                IF (FILNUM .EQ. 0) GO TO 200                     |
|     C*****************************************************      |
|     C               READ DATA FROM FILE IN               *      |
|     C                  SEQUENTIAL ORDER                  *      |
|     C*****************************************************      |
|                 DISPLAY "PRINT RECORDS IN NAME ORDER"           |
|              20 ILEN=FREAD(FILNUM,TNPUT,-72)                    |
|                  IF (.CC.) 300,30,35                            |
|              30 DISPLAY OUTPUT                                  |
|                  GO TO 20                                       |
|     C*****************************************************      |
|     C      READ IN SEQUENCE BY ALTERNATE KEY             *      |
|     C*****************************************************      |
|              35 DISPLAY "PRINT RECORDS IN PHONE # ORDER"        |
|                 CALL FFINDBYKEY(FILNUM,KEYVAL,21,8,2)           |
|                 IF (.CC.) 400,40,400                            |
|              40 ILEN=FREAD(FILNUM,INPUT,-72)                    |
|                  IF (.CC.) 500,45,500                           |
|              45 DISPLAY OUTPUT                                  |
|                  GO TO 40                                       |
|     C*****************************************************      |
|     C                   CLOSE FILE                       *      |
|     C*****************************************************      |
|              50 CALL FCLOSE(FILNUM,0,0)                         |
|                  IF (.CC.) 600,55,600                           |
|              55 STOP "END OF JOB"                               |
___________________________________________________________________

          Figure 5-3.  Reading KSAM File in Key Sequence Using FORTRAN 
_____________________________________________________________
|                                                           |
|     C*****************************************************|
|     C                   ERROR MESSAGES                   *|
|     C*****************************************************|
|               200 CALL FCHECK(FILNUM,IERRNUM)             |
|                   CALL FERRMSG(IERRNUM,MESSAGEW,LENGTH)   |
|                   WRITE(6,250)(MESSAGE(I),I=1,LENGTH)     |
|                   STOP "CANNOT OPEN KSAM FILE"            |
|               300 CALL FCHECK(FILNUM,IERRNUM)             |
|                   CALL FERRMSG(IERRNUM,MESSAGEW,LENGTH)   |
|                   WRITE(6,250)(MESSAGE(I),I=1,LENGTH)     |
_____________________________________________________________
_______________________________________________________________________________
|                                                                             |
|               400 CALL FCHECK(FILNUM,IERRNUM)                               |
|                   CALL FERRMSG(IERRMUN,MESSAGEW,LENGTH)                     |
|                   WRITE(6,250)(MESSAGE(I),I=1,LENGTH)                       |
|                   STOP " ERROR OCCURRED WHILE USING FIFINDBYKEY"            |
|               500 CALL FCHECK(FILNUM,IERRNUM)                               |
|                   CALL FERRMSG(IERRNUM,MESSAGEW,LENGTH)                     |
|                   WRITE(6,250)(MESSAGE(I),I=1,LENGTH)                       |
|                   STOP "ERROR OCCURRED READING BY ALTERNATE KEY"            |
|               600 CALL FCHECK(FILNUM,IERRNUM)                               |
|                   CALL FERRMSG(IERRNUM,MESSGEW,LENGTH)                      |
|                   WRITE(6,250)(MESSAGE(I),I=1,LENGTH)                       |
|                   STOP "CANNOT CLOSE FILE"                                  |
|               250 FORMAT(1X,72A1)                                           |
|                    END                                                      |
|                                                                             |
|                                                                             |
|     Output from Program Execution:                                          |
|                                                                             |
|               PRINT RECORDS IN NAME ORDER                                   |
|               CARDIN    RICK    578-7018  11100 WOLFE ROAD       CUPERTINO  |
|               ECKSTEIN  LEO     287-5137  5303 STEVENS CREEK     SANTA CLARA|
|               HOSODA    JOE     227-6214  1180 SAINT PETER CT.   LOS ALTOS  |
|               NOLAN     JACK    923-4975  967 REED AVE.          SUNNYVALE  |
|               PASBY     LINDA   295-1187  TOWN & CNTRY VILLAGE   SAN JOSE   |
|               ROBERT    GERRY   259-5535  12345 TELEGRAPH AVE.   BERKELEY   |
|               SEELY     HENRY   293-4220  1144 LEBERTY ST. EL    CERRITO    |
|               TURNEWR   IVAN    984-8498  22905 EMERSON ST.      OAKLAND    |
|               WESTER    ELDER   287-4598  1256 KINGFISHER ST.    SUNNYVALE  |
|               WHITE     GORDON  398-0301  4350 ASHBY AVE.        BERKELEY   |
|               PRINT RECORDS IN PHONE # ORDER                                |
|               HOSODA    JOE     227-8214  1180 SAINT PETER CT.   LOS ALTOS  |
|               ROBERT    GERRY   259-5535  12345 TELEGRAPH AVE.   BERKELEY   |
|               WESTER    ELDER   287-4598  1256 KINGFISHER ST.    SUNNYVALE  |
|               ECKSTEIN  LEO     287-5l37  5303 STEVENS CREEK     SANTA CLARA|
|               SEELY     HENRY   293-4220  1144 LEBERTY ST.       EL CERRITO |
|               PASBY     LINDA   295-1187  TOWN & CNTRY VILLAGE   SAN JOSE   |
|               WHITE     GORDON  398-0301  4350 ASHBY AVE.        BERKELEY   |
|               CAPDIN    RICK    578-7018  11100 WOLFE ROAD       CUPERTINO  |
|               NOLAN     JACK    923-4975  967 REED AVE.          SUNNYVALE  |
|               TURNEWR   IVAN    984-8498  22905 EMERSON ST.      OAKLAND    |
|     STOP END OF JOB                                                         |
_______________________________________________________________________________

          Figure 5-3.  Reading KSAM File in Key Sequence Using FORTRAN (continued) 



MPE/iX 5.0 Documentation