|
Das nachfolgende Microsoft Basic Beispiel demonstriert die Verwendung der von FATS bereitgestellten  Index-Befehle:
REM FATS 02.30 REM (c) GCS Software, Udo Gertz 1993-1998 REM REM Testprogramm (Microsoft Basic / Quick Basic Compiler) REM REM Schnelle Re-Indizierung (Befehl "XB") REM Es wird die erweiterte FATS Version benötigt. REM REM 19-03-2009 U.Gertz OPEN "R", #1, "KUNDEN.DAT", 128 FIELD #1, 1 AS LOESCHKENNZ$,_ 5 AS ANREDE$,_ 25 AS NAME$,_ 25 AS BRANCHE$,_ 25 AS STRASSE$,_ 5 AS PLZ$,_ 20 AS ORT$ REM -------> Indexdatei erstellen REM "C" Create Indexfile REM REM Mit diesem Befehl erstellen Sie eine Indexdatei, wobei eine REM eventuell bereits vorhandene Datei mit demselben Dateinamen REM gelöscht wird. REM Die Indexdatei wird dabei gleichzeitig mit den über den REM Befehl Auto Refresh (Y) definierten Öffnungsflags geöffnet REM und der Dateinummer "FileNo" zugewiesen. Diese Nummer muß bei REM allen nachfolgenden FATS-Befehlen angegeben werden, um mit REM der Indexdatei zu arbeiten. REM REM Maximal 200 Schlüssel pro Datensatz können in einer Indexdatei REM verwaltet werden, wobei die maximale Schlüssellänge 240 Zeichen REM beträgt. REM REM Beachten Sie bei der Dateipfadangabe, daß der Backslash (\) von REM FATS als Trennzeichen behandelt wird und daher im Pfad durch REM einen normalen Schrägstrich ersetzt werden sollte. REM Alternativ dazu können Sie auch das Trennzeichen umdefinieren, REM indem Sie dieses als erstes Zeichen im Befehlsstring angeben, REM z.B. szCmnd = "&C&C:\ARTIKEL.KEY&1&1&A&1" (das Trennzeichen muß REM ein ASCII-Zeichen kleiner als 48 sein). REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "C\{Filename}\{KeyLength}\{KeyCount}\{KeyType}\{FileNo}" REM REM FileName Name der Datei, eventuell mit Pfadangabe REM (z.B. C:/DATEN/ARTIKEL.KEY oder ARTIKEL.KEY) REM REM KeyLength Maximale Länge der Schlüssel REM REM KeyCount Anzahl Schlüssel (1-200) REM REM KeyType Art der Schlüssel (A=ASCII Textschlüssel, I=Integer) REM REM FileNo Nummer der Indexdatei (1-40) CALL FATSBASIC( "C\KUNDEN.KEY\25\3\A\1", ERRORCODE%, RECNO&, KEYLEN% ) IF ERRORCODE% <> 0 THEN PRINT PRINT "FATS Fehler: "; ERRORCODE%; " (Befehl: C)" GOTO ENDE END IF REM ======================================================================== REM Indexdatei wiederherstellen REM ======================================================================== RECORDS& = 0 DO GET #1, RECORDS& + 1 IF EOF(1) THEN REM Nachdem der letzte Datensatz indiziert wurde, wird die REM Indizierung durch die Angabe einer Null anstelle einer REM gültigen Datensatznummer beendet ("XB\{Dateinummer}\0"). REM Die Datei wird dabei geschlossen - ein Close-Befehl ist REM danach nicht mehr nötig. CALL FATSBASIC( "XB\1\0", ERRORCODE%, RECNO&, KEYLEN% ) EXIT DO END IF RECORDS& = RECORDS& + 1 IF LOESCHKENNZ$ = " " THEN REM "XB" Re-Indexing: Build REM REM Diesem Befehl wird die im Befehl "C" angegebene Anzahl REM Schlüssel im Kommandostring übergeben. Die Schlüssel REM werden in die Indexdatei einsortiert und der Satznummer REM "RecNo" zugeordnet. REM REM Verwenden Sie diesen Befehl, um nach einem erfolgreichen REM "Create Indexfile" (C) - Befehl innerhalb einer REM Programmschleife die Schlüssel aller Datensätze in den REM Index einzufügen. REM Der Befehl steht nur bei einer Re-Indizierung bereit, d.h. REM unmittelbar nach Ausführung des "C"-Kommandos, spätere REM Änderungen am Index werden z.B. über den Insert Record (I) REM Befehl realisiert. REM REM Das Kommando "XB\{FileNo}\0" beendet die Re-Indizierung und REM schließt die entsprechende Indexdatei. Die Indexdatei wird bei REM einem durch Fehler bedingten vorzeitigen Abbruch der Re-Indizierung REM automatisch geschlossen. In jedem Fall kann ein anschließendes REM Close-Kommando unterbleiben. REM REM Die Länge der übergebenen Schlüssel darf die beim "Create REM Indexfile" (C) angegebene Länge nicht überschreiten, kürzere REM Schlüssel werden mit dem ASCII-Zeichen 00h auf die maximale REM Schlüssellänge erweitert. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "XB\{FileNo}\{RecNo}\{KeyStr1}[\{KeyStr2}]" REM REM FileNo Nummer der Indexdatei REM REM RecNo <> 0 Datensatznummer REM == 0 Re-Indizierung beenden REM REM KeyStr# Schlüssel CMND$ = "XB\1\" + STR$(RECORDS&) + "\" CMND$ = CMND$ + RTRIM$(NAME$) + "\" + RTRIM$(BRANCHE$) + "\" + RTRIM$(PLZ$ + ORT$) ELSE REM Datensatz als "Gelöscht" markieren 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