| ![]() | ||||||||||||||||||||
The following Microsoft Basic example demonstrates the use of the FATS
 indexing commands:
REM FATS 02.30
REM (c) GCS Software, Udo Gertz 1993-1998
REM
REM Test program (Microsoft Basic / Quick Basic Compiler)
REM
REM Fast Re-Indexing with the command "XB"
REM This program needs the extended version of FATS
REM
REM 19-03-2009 U.Gertz
OPEN "R", #1, "CUSTOMER.DAT", 128
FIELD #1, 1 AS DELETEDMARK$,_
5 AS CUSTID$,_
25 AS NAME$,_
25 AS JOB$,_
25 AS STREET$,_
5 AS ZIP$,_
20 AS CITY$
REM -------> Create index file
REM
"C" Create Indexfile
REM
REM With this command you create an index file, whereby a possibly
REM already existing file with the same name is deleted.
REM After the file is created it will be opened with the opening
REM flags defined with the command Auto Refresh (Y) and can be
REM accessed under the file number you specified.
REM
REM Max. 200 primary keys per data record can be administered in an
REM index file, the max. key length amounts to 240 characters.
REM
REM Full path names must be specified using forward slashes (/)
REM instead of Backslashes (\), because FATS normally uses the
REM Backslash character as delimiter.
REM You may change the delimiters by placing the desired character
REM as the first character of the command string,
REM e.g. szCmnd = "&C&C:\ARTICLES.KEY&1&1&A&1". Any character with
REM an Ascii code less then 48 will be accepted.
REM
REM The syntax of the command string:
REM
REM szCmnd = "C\{Filename}\{KeyLength}\{KeyCount}\{KeyType}\{FileNo}"
REM
REM FileName filename, perhaps with an additional path
REM (e.g. C:/DATA/ARTICLES.KEY or ARTICLES.KEY)
REM
REM KeyLength Maximum key length (1-250)
REM If you choose to have more than one key for
REM this index file, you may specify the length
REM for each key (separated by a semicolon ";")
REM to conserve diskette space.
REM Otherwise, the maximum length applies to all
REM keys, i.e. every key will occupy the maximum
REM space.
REM
REM KeyCount Number of primary keys (1-200)
REM
REM KeyType Key type (A = Ascii text, I = Integer)
REM
REM FileNo File number (1-40)
CALL FATSBASIC( "C\CUSTOMER.KEY\5;25\4\A\1", ERRORCODE%, RECNO&, KEYLEN% )
IF ERRORCODE% <> 0 THEN
PRINT
PRINT "FATS errorcode: "; ERRORCODE%; " (command: C)"
GOTO ENDE
END IF
REM ========================================================================
REM Re-Indexing
REM ========================================================================
RECORDS& = 0
DO
GET #1, RECORDS& + 1
IF EOF(1) THEN
REM After the last record was inserted the creating process
REM has to be terminated with the command "XB\{FileNo}\0".
REM Because this command closes the index file you don't
REM have to do a close command.
CALL FATSBASIC( "XB\1\0", ERRORCODE%, RECNO&, KEYLEN% )
EXIT DO
END IF
RECORDS& = RECORDS& + 1
IF DELETEDMARK$ = " " THEN
REM
"XB" Re-Indexing: Build
REM
REM This command inserts the primary keys of the specified
REM data record ("RecNo") into the index file. The number
REM of keys included in the command string must equal the
REM number of primary keys you specified in the "C" command.
REM
REM Use this command to insert the keys of all data records
REM into the index after a successful "Create Indexfile" (C)
REM command within a programme loop. The command only can be
REM used during the re-indexing phase, i.e. immediately
REM according to a call of the "C"-command.
REM
REM The command "XB\{FileNo}\0" terminates re-indexing and
REM closes the corresponding index file. The file is closed
REM automatically in the case of a premature abnormal
REM termination of indexing. A subsequent close-command can
REM always remain undone.
REM
REM The length of the transferred keys may not exceed the
REM maximum key length specified with the "Create Indexfile"
REM command. Variable length keys will be padded with the Ascii
REM char 0 to the maximum key length.
REM
REM The syntax of the command string:
REM
REM szCmnd = "XB\{FileNo}\{RecNo}\{KeyStr1}[\{KeyStr2}]"
REM
REM FileNo File number
REM
REM RecNo <> 0 Record Number
REM == 0 Stop Re-Indexing
REM
REM KeyStr# Key value
CMND$ = "XB\1\" + STR$(RECORDS&) + "\"
CMND$ = CMND$ + RTRIM$(CUSTID$) + "\" + RTRIM$(NAME$) + "\" + RTRIM$(JOB$) + "\" + RTRIM$(ZIP$ + CITY$)
ELSE
REM Add the data record to the list of deleted records.
CMND$ = "DL\" + STR$(RECORDS&) + "\S\1"
END IF
CALL FATSBASIC( CMND$, ERRORCODE%, RECNO&, KEYLEN% )
IF ERRORCODE% <> 0 THEN EXIT DO
LOOP WHILE NOT EOF(1)
ENDE:
CLOSE #1
END
© 2008
GCS Software, Udo Gertz