|
Das nachfolgende Microsoft Basic Beispiel demonstriert die Verwendung der von FATS bereitgestellten  Index-Befehle:
"C" Create Indexfile (Indexdatei definieren, erstellen und öffnen.) | |
"O" Open Indexfile (Indexdatei öffnen.) | |
"K" Close Indexfile (Eine oder alle Indexdateien schließen.) | |
"I" Insert Record ((Haupt)-Schlüssel in Indexdatei einfügen und Datensatznummer besetzen.) | |
"F" Search First (Suchen des ersten Schlüssels.) | |
"L" Search Last (Suchen des letzten Schlüssels.) | |
"N" Search Next (Suchen des nächsten Schlüssels in Folge.) | |
"A" Search Next After (Suchen des auf den angegebenen Schlüssel folgenden Schlüssels.) | |
"E" Search Previous Before (Suchen des dem angegebenen Schlüssel vorangehenden Schlüssels.) | |
"Y" Auto Refresh (Bestimmt das Verhalten der Bibliothek im Netzwerk- und Einzelplatzbetrieb.) |
REM FATS 02.30 REM (c) GCS Software, Udo Gertz 1993-1998 REM REM Testprogramm (Microsoft Basic / Quick Basic Compiler) REM REM Erstellen der Testdateien KUNDEN.DAT / KUNDEN.KEY REM REM 19-03-2009 U.Gertz REM Benötigte Objekt-Dateien REM ======================== REM REM Folgende Objekt-Module werden benötigt, wenn FATS zum REM Anwendungsprogramm gelinkt werden soll: REM REM FATS.OBJ FATS Universalmodul REM FATS_MB6.OBJ MS-Basic Schnittstelle für NEAR-Strings, oder REM FATS_MB7.OBJ MS-Basic Schnittstelle für FAR-Strings (/Fs) REM REM Wenn Sie die Dynamische Bibliothek FATS_O16.DLL verwenden REM möchten, dann werden die folgenden Bibliotheken benötigt: REM REM FATS_O16.LIB Import-Library für FATS_O16.DLL REM FATSMB6D.OBJ Schnittstelle für NEAR-Strings, oder REM FATSMB7D.OBJ Schnittstelle für FAR-Strings (/Fs) REM REM Wenn Sie die erweiterte Version von FATS erworben haben, dann REM müssen Sie das Objekt-Modul FATSX.OBJ bzw. die Bibliothek REM FATSXO16.LIB (für die DLL FATSXO16.DLL) verwenden. REM REM REM Compilieren der Programme REM ========================= REM REM Um Ihre Programme zu übersetzen ist eine der folgenden Methoden zu wählen: REM REM 1. Methode: FATS an das Anwendungsprogramm binden REM REM BC TST1GER6 /Lp [/Fs] REM LINK TST1GER6 FATS_MB[6 oder 7].OBJ FATS.OBJ REM REM oder wenn Sie die erweiterte Version von FATS REM besitzen: (FATSX.OBJ) REM REM LINK TST1GER6 FATS_MB[6 oder 7].OBJ FATSX.OBJ REM REM 2. Methode: Aufruf der Dynamischen Bibliothek (FATS_O16.DLL) REM REM BC TST1GER6 /Lp [/Fs] REM LINK TST1GER6 FATSMB[6 oder 7]D.OBJ FATS_O16.LIB REM REM oder wenn Sie die erweiterte Version von FATS REM besitzen: (FATSXO16.DLL) REM REM LINK TST1GER6 FATSMB[6 oder 7]D.OBJ FATSXO16.LIB REM REM REM FATS Befehle ausführen REM ====================== REM REM Alle FATS Befehle werden mit einer Funktion ausgeführt: REM REM FATSBASIC( szCmnd$, uFATSError%, dwRecno&, nKeyLen% ) REM REM Bedeutung der verwendeten Parameter: REM REM szCmnd Dieser String definiert den auszuführenden FATS- REM Befehl sowie die dazugehörenden Parameter. REM REM nErrorcode Über diese Variable wird die Anwendung über REM Erfolg (0) oder Mißerfolg (<> 0) der letzten REM FATS-Aktion unterrichtet. REM REM nKeyLen Schlüssellänge, einfache Integer REM REM Da es für FATS keine Möglichkeit gibt, Basic-Strings REM direkt zu manipulieren, müssen Sie selbst dafür sorgen, REM daß die Stringvariable szFATSkey$ die benötigte Länge REM hat. Die Basic-Funktion SPACE$ füllt daher den String REM szFATSkey$ mit der benötigten Anzahl Leerzeichen. REM Der nachträgliche Aufruf von FATSGETKEY kopiert dann REM den Schlüsselwert in den Basic-String: REM REM If nKeyLen% > 0 Then REM szFATSkey$ = Space$( nKeyLen% ) REM Call FATSGETKEY( szFATSkey$ ) REM Else REM szFATSkey$ = "" REM End If REM -------> Aktivierung des Netzwerkbetriebes REM REM "Y" Auto Refresh Kommando REM REM FATS ist standardmäßig für den Betrieb im Netzwerk ausgestattet. REM Beinahe alle Befehle können sowohl im Einzelplatz- als auch im REM Netzwerkbetrieb ausgeführt werden. REM Standardmäßig sind die Netzfunktionen ausgeschaltet. Sie können REM diese mit dem Befehl "Y\2" initialisieren. REM Diese Initialisierung wird normalerweise beim Programmstart REM erledigt und gilt dann für die gesamte Laufzeit des Programmes. CALL FATSBASIC( "Y\2", ERRORCODE%, RECNO&, KEYLEN% ) REM -------> ASCII-Datei mit Demodaten öffnen OPEN "R", #1, "..\..\..\DEMODATA\KUNDEN.ASC", 105 FIELD #1, 5 AS F1$, 25 AS F2$, 25 AS F3$, 25 AS F4$, 5 AS F5$, 20 AS F6$ REM -------> Datendatei erstellen PRINT "Datendatei wird erstellt ..." OPEN "R", #2, "KUNDEN.DAT", 128 FIELD #2, 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) PRINT "Indexdatei wird erstellt ..." CALL FATSBASIC( "C\KUNDEN.KEY\25\3\A\1", ERRORCODE%, RECNO&, KEYLEN% ) IF ERRORCODE% <> 0 GOTO ENDE REM ======================================================================== REM Datensätze einfügen REM ======================================================================== PRINT PRINT "Es werden jetzt 222 Datensätze in die Datei eingefügt. Für jeden" PRINT "Datensatz werden 3 Schlüssel in die Indexdatei eingefügt." INPUT "Bitte [ENTER] drücken...", X$ FOR X=1 TO 222 GET #1, X LSET LOESCHKENNZ$=" " LSET ANREDE$=F1$ LSET NAME$=F2$ LSET BRANCHE$=F3$ LSET STRASSE$=F4$ LSET PLZ$=F5$ LSET ORT$=F6$ REM "I" Insert Record REM REM Diesem Befehl wird die im "Create Indexfile"-Befehl REM angegebene Anzahl Schlüssel im Kommandostring übergeben. REM Die Schlüssel werden in die Indexdatei einsortiert und REM einer Satznummer zugeordnet, welche in der "RECNO" REM Variable an das Anwenderprogramm zurückgegeben wird. REM REM Anschließend sollte das aufrufende Programm den zugehörigen REM Datensatz entsprechend der zurückgegebenen Satznummer in REM die Datendatei speichern. REM REM Die Länge der übergebenen Schlüssel darf die beim REM "Create-Indexfile" angegebene Länge nicht überschreiten, REM kürzere Schlüssel werden mit dem ASCII-Zeichen 00h auf die REM maximale Schlüssellänge erweitert. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "I\{FileNo}\{KeyStr1}[\{KeyStr2}[\{KeyStr3}]]" REM REM FileNo Nummer der Indexdatei REM REM KeyStr# Schlüssel CMND$ = "I\1\" CMND$ = CMND$ + RTRIM$(NAME$) + "\" + RTRIM$(BRANCHE$) + "\" + RTRIM$(PLZ$ + ORT$) CALL FATSBASIC( CMND$, ERRORCODE%, RECNO&, KEYLEN% ) IF ERRORCODE% <> 0 GOTO ENDE PRINT NAME$; " --> Satznummer "; RECNO& PUT #2, RECNO& NEXT X CLOSE #1 REM "K" Close Indexfile REM REM Mit diesem Befehl schließen Sie die über "FileNo" REM angegebene Indexdatei. REM REM Wenn Sie den Datencache mit dem Befehl Auto Refresh (Y) REM aktiviert haben, dann werden eventuell noch im Cachepuffer REM befindliche Daten automatisch auf die Platte geschrieben, REM was Sie jedoch auch jederzeit mit dem Befehl Write Page REM Map (W) erzwingen können. REM REM Wenn der Datencache inaktiv ist, dann werden nach jedem REM FATS-Befehl sämtliche veränderten Daten auf die Platte REM geschrieben. Das Schließen der Dateien ist daher nur vor dem REM Beenden des aufrufenden Programmes notwendig. REM REM Wenn Sie den Parameter "FileNo" weglassen, dann werden alle REM geöffneten Indexdateien geschlossen. Diese Variante empfiehlt REM sich vor der Beendigung des Anwendungsprogrammes. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "K\{FileNo}" REM REM FileNo Nummer der Indexdatei CALL FATSBASIC( "K\1", ERRORCODE%, RECNO&, KEYLEN% ) REM ======================================================================== REM Suche im Index REM ======================================================================== REM "O" Open Indexfile REM REM Mit diesem Befehl wird die über "FileName" bestimmte REM Indexdatei mit den über den Befehl Auto Refresh (Y) REM definierten Öffnungsflags geöffnet und der Dateinummer REM "FileNo" zugewiesen. Diese Nummer muß bei allen nach- REM folgenden FATS-Befehlen angegeben werden, um mit der REM Indexdatei zu arbeiten. REM Eine eventuell mit der gleichen Dateinummer bereits REM geöffnete Indexdatei wird zuvor geschlossen. REM REM Beachten Sie bei der Dateipfadangabe, daß der Backslash REM (\) von FATS als Trennzeichen behandelt wird und daher REM im Pfad durch einen normalen Schrägstrich ersetzt werden REM sollte. REM Alternativ dazu können Sie auch das Trennzeichen REM umdefinieren, indem Sie dieses als erstes Zeichen im REM Befehlsstring angeben, z.B. szCmnd = "&O&C:\ARTIKEL.KEY&1" REM (das Trennzeichen muß ein ASCII-Zeichen kleiner als 48 sein). REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "O\{FileName}\{FileNo}" REM REM FileName Name der Datei, eventuell mit Pfadangabe REM (z.B. C:/DATEN/ARTIKEL.KEY oder ARTIKEL.KEY) REM REM FileNo Nummer der Indexdatei CALL FATSBASIC( "O\KUNDEN.KEY\1", ERRORCODE%, RECNO&, KEYLEN% ) REM -------> Datensätze nach Name sortiert ausgeben PRINT PRINT "Die Datensätze werden jetzt anhand des ersten Schlüssels (NAME)" PRINT "aufsteigend sortiert ausgegeben. Der dabei verwendete FATS-Befehl" PRINT "SEARCH NEXT AFTER kann im Einzelplatz und im Netzwerk verwendet" PRINT "werden." PRINT INPUT "Bitte [ENTER] drücken...", X$ REM "F" Search First REM REM Dieser Befehl gibt die Datensatznummer und den Schlüsselwert REM des kleinsten Schlüssels der angegebenen Schlüsselnummer REM zurück. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "F\{KeyNo}\{FileNo}" REM REM KeyNo Schlüsselnummer REM REM FileNo Nummer der Indexdatei CMND$ = "F\1\1" SCHLEIFE1: CALL FATSBASIC( CMND$, ERRORCODE%, RECNO&, KEYLEN% ) IF ERRORCODE% <> 0 GOTO WEITER1 FATSKEY$ = SPACE$( KEYLEN% ) CALL FATSGETKEY( FATSKEY$ ) GET #2, RECNO& PRINT NAME$; " --> Satznummer "; RECNO& REM "A" Search Next After REM REM Dieser Befehl sucht den über "KeyString" und "RecNo" REM spezifizierten Schlüssel in der Indexdatei und blättert dann REM um eine Position weiter. REM Als Ergebnis wird der auf den angegebenen Schlüssel folgende REM Schlüssel zurückgegeben. Der Aufruf entspricht daher den REM Befehlen Search Generic (G) mit anschließendem Search Next (N). REM REM Im Gegensatz zum Befehl "Search Next" kann dieser Befehl auch REM problemlos im Netzwerk verwendet werden. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "A\{KeyNo}\{RecNo}\{FileNo}\{KeyString}" REM REM KeyNo Schlüsselnummer REM REM RecNo Datensatznummer REM REM FileNo Nummer der Indexdatei REM REM KeyString Schlüssel CMND$ = "A\1\" + STR$( RECNO& ) + "\1\" + FATSKEY$ GOTO SCHLEIFE1 WEITER1: REM --------> Datensätze nach Branche sortiert ausgeben PRINT PRINT "Die Datensätze werden jetzt anhand des zweiten Schlüssels (BRANCHE)" PRINT "aufsteigend sortiert ausgegeben." PRINT INPUT "Bitte [ENTER] drücken...", X$ CMND$ = "F\2\1" SCHLEIFE2: CALL FATSBASIC( CMND$, ERRORCODE%, RECNO&, KEYLEN% ) IF ERRORCODE% <> 0 GOTO WEITER2 GET #2,RECNO& PRINT BRANCHE$; " "; NAME$; " --> Satznummer "; RECNO& REM "N" Search Next REM REM Dieser Befehl gibt die Datensatznummer und den REM Schlüsselwert des nächsten Schlüssels zurück. REM Ausgegangen wird dabei vom Ergebnis des letzten REM Suchbefehls, d.h. unmittelbar vor der Anwendung REM dieses Befehls muß ein beliebiger Such-Befehl, REM ausgeführt worden sein. REM REM Jede Veränderung der Indexdatei durch das Einfügen REM oder Löschen von Schlüsseln macht einen für diesen REM Befehl notwendigen internen Zeiger ungültig, wodurch REM der Next-Befehl fehlschlägt. Da dies im Netzwerk auch REM von einer anderen Station aus passieren kann, sollte REM in Netzwerkumgebungen der Befehl Search Next After (A) REM verwendet werden. REM REM Wenn es keinen nächsten Schlüssel gibt, d.h. der zuletzt REM gefundene Schlüssel der Letzte in Folge war, wird der REM Fehlercode #15 zurückgegeben. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "N\{FileNo}" REM REM FileNo Nummer der Indexdatei CMND$ = "N\1" GOTO SCHLEIFE2 WEITER2: REM --------> Datensätze nach PLZ & Ort sortiert ausgeben PRINT PRINT "Die Datensätze werden jetzt anhand des dritten Schlüssels (PLZ/ORT)" PRINT "absteigend sortiert ausgegeben." PRINT INPUT "Bitte [ENTER] drücken...", X$ REM "L" Search Last REM REM Dieser Befehl gibt die Datensatznummer und den Schlüsselwert REM des größten Schlüssels der angegebenen Schlüsselnummer zurück. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "L\{KeyNo}\{FileNo}" REM REM KeyNo Schlüsselnummer REM REM FileNo Nummer der Indexdatei CMND$ = "L\3\1" SCHLEIFE3: CALL FATSBASIC( CMND$, ERRORCODE%, RECNO&, KEYLEN% ) IF ERRORCODE% <> 0 GOTO WEITER3 FATSKEY$ = SPACE$( KEYLEN% ) CALL FATSGETKEY( FATSKEY$ ) GET #2, RECNO& PRINT PLZ$; " "; ORT$; " "; NAME$; " --> Satznummer "; RECNO& REM "E" Search Previous Before REM REM Dieser Befehl sucht den über "KeyString" und "RecNo" REM spezifizierten Schlüssel in der Indexdatei und blättert dann REM um eine Position zurück. REM Als Ergebnis wird der dem angegebenen Schlüssel vorangehende REM Schlüssel zurückgegeben. Der Aufruf entspricht daher den REM Befehlen "Search Generic" mit anschließendem "Search Prev". REM REM Im Gegensatz zum Befehl "Search Previous" kann dieser Befehl REM auch problemlos im Netzwerk verwendet werden. REM REM Der Aufbau des Kommandostrings: REM REM szCmnd = "E\{KeyNo}\{RecNo}\{FileNo}\{KeyString}" REM REM KeyNo Schlüsselnummer REM REM RecNo Datensatznummer REM REM FileNo Nummer der Indexdatei REM REM KeyString Schlüssel CMND$ = "E\3\" + STR$( RECNO& ) + "\1\" + FATSKEY$ GOTO SCHLEIFE3 WEITER3: ENDE: REM --------> Indexdatei schließen CALL FATSBASIC( "K\1", ERRORCODE%, RECNO&, KEYLEN% ) CLOSE #2 END
© 2008 GCS Software, Udo Gertz