FATS - Fast Access Tree System
Inhaltsverzeichnis
Programmierschnittstellen
MS-Basic für OS/2


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