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


Mit den  FATS-Matchcode Befehlen läßt sich auf einfachste Weise ein Volltext-Index mit dem Inhalt der von Ihnen gewünschten Spalten bzw. Felder einer Datentabelle bzw. -datei erstellen.
Jedes Wort und jede Zahl wird in den Index aufgenommen, es wird eine "invertierte Liste" erstellt.

Dieser Index ermöglicht es FATS, jeden Datensatz durch Angabe beliebiger Begriffe in Sekundenbruchteilen zu finden.

FATS stellt dem Anwendungsprogramm unmittelbar nach der Suche eine Liste aller gefundener Satznummern bzw. Primary-Keys zur Verfügung.

Das nachfolgende Microsoft Basic Beispiel demonstriert die Verwendung der FATS Matchcode-Befehle:

 "MC" Create Matchcode File
(Matchcode-Indexdatei definieren, erstellen und öffnen.)
 "MB" Build Matchcode
(Inhalte der Datenspalten in den Matchcode-Index einfügen.)
 "O" Open Indexfile
(Indexdatei öffnen.)
 "MS" Search in Matchcode
(Matchcode-Suchabfrage durchführen.)

PRINT "Dieses Testprogramm benötigt die erweiterte Version von FATS (FATSXO16.DLL)"
PRINT "Es zeigt die Verwendung der Befehle: 'MC', 'MB', 'MS' und 'MA'"
PRINT
PRINT "Folgende Kommandos generieren die ausführbare Programmdatei:"
PRINT
PRINT "     BC tst2_ger /Lp"
PRINT "     LINK tst2_ger fatsmb6d.obj fatsxo16.lib"
PRINT
PRINT "   oder mit Basic 7.x und Far-Strings:"
PRINT
PRINT "     BC tst2_ger /Lp /Fs"
PRINT "     LINK tst2_ger fatsmb7d.obj fatsxo16.lib"
PRINT
INPUT "Bitte [ENTER] drücken...", X$
PRINT


REM  -------> Datendatei öffnen

PRINT "Datendatei wird geöffnet ..."

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  ========================================================================
REM            Matchcode generieren
REM  ========================================================================


REM  -------> Matchcode Datei erstellen
REM
REM  Der Matchcode wird mit dem Kommando  "MC" Create Matchcode File
REM  generiert. Dabei geben Sie die logischen Suchgruppen und deren
REM  Eigenschaften an. Eine Suchgruppe besteht aus dem Inhalt eines
REM  oder mehrerer Datenfelder, in denen bei Angabe der Suchbegriffe
REM  gemeinsam gesucht werden soll.
REM
REM  In diesem Beispiel werden folgende Suchgruppen definiert:
REM
REM    Suchgruppe      Felder
REM
REM        I1          NAME
REM        I2          BRANCHE
REM        I3          PLZ & ORT
REM
REM  Der Aufbau des Kommandostrings:
REM
REM    szCmnd = "MC\{FileName}\{Flags}\{FileNo}\{Col1def}[\{Col2def}]"
REM
REM      FileName   Name der Matchcode-Datei, eventuell mit Pfadangabe
REM                 (z.B. C:/DATEN/KUNDEN.FMS oder KUNDEN.FMS)
REM
REM      Flags      Momentan noch nicht benutzt
REM
REM      FileNo     Nummer der Matchcode-Indexdatei
REM
REM      Col#def    Definition der Datenspalte # (Flags, durch Komma getrennt).
REM                 Der Inhalt der entsprechenden Datenspalten wird später den
REM                 Befehlen "MB", "MI" und "MD" in der durch diesen Befehl
REM                 festgelegten Reihenfolge übergeben.
REM
REM                 I#  Spalteninhalt in der Suchgruppe # (1-32) indizieren.
REM                     Sie können mehrere Spalten zu einer logischen Suchgruppe
REM                     zusammenfassen (z.B. Vorname, Nachname).
REM
REM                 An dieser Stelle sind noch weitere Einstellungen möglich,
REM                 die ausführlich im Benutzerhandbuch beschrieben sind.

PRINT
PRINT "Matchcode-Datei wird erstellt ..."

CALL FATSBASIC("MC\KUNDEN.FTS\\1\I1\I2\I3", ERRORCODE%, RECNO&, KEYLEN%)
IF ERRORCODE% <> 0 THEN

  PRINT
  PRINT "FATS Fehlercode: "; ERRORCODE%; " (Kommando: MC)"
  GOTO ENDE

END IF

REM  -------> Texte einfügen
REM
REM  Nachdem die Datei definiert und erzeugt wurde, wird der Inhalt der
REM  Datensätze mit dem Kommando  "MB" Build Matchcode in die Datei
REM  eingefügt. Dabei dient die Definition, welche Sie über den Befehl
REM  "MC" festgelegt haben, als Schablone für dieses Kommando.
REM
REM  Syntax des Kommandostrings:
REM
REM    szCmnd = "MB\{FileNo}\{RecNo}\{Col1data}[\{Col2data}[\{Col3data}]]"
REM
REM    FileNo     Nummer der Matchcode-Indexdatei
REM
REM    RecNo      <> 0 Datensatz- bzw. ID-Nummer
REM               == 0 Matchcode-Indizierung beenden
REM
REM    Col#data   Inhalt der Datenspalte X

PRINT
PRINT "Der Matchcode wird jetzt aufgebaut"
PRINT
INPUT "Bitte [ENTER] drücken...", X$

CURRECNO& = 0

DO

  GET #1, CURRECNO& + 1

  IF NOT EOF(1) THEN

    CURRECNO& = CURRECNO& + 1

    CMND$ = "MB\1\" + STR$(CURRECNO&)

    IF LOESCHKENNZ$ = " " THEN

      CMND$ = CMND$ + "\" + RTRIM$(NAME$)
      CMND$ = CMND$ + "\" + RTRIM$(BRANCHE$)
      CMND$ = CMND$ + "\" + RTRIM$(PLZ$ + " " + ORT$)

    END IF

    CALL FATSBASIC(CMND$, ERRORCODE%, RECNO&, KEYLEN%)

    IF ERRORCODE% <> 0 THEN

      REM  Wenn bei der Generierung des Matchcode-Indizes ein Fehler
      REM  auftritt, dann wird die entsprechende Datei automatisch
      REM  geschlossen.

      PRINT "FATS Fehlercode: "; ERRORCODE%; " (Kommando: MB)"
      EXIT DO
    END IF

    PRINT "  "; NAME$; " --> Satznummer "; CURRECNO&

  ELSE

    REM  Nachdem der letzte Datensatz indiziert wurde, wird die
    REM  Indizierung durch die Angabe einer Null anstelle einer
    REM  gültigen Datensatznummer beendet ("MB\{Dateinummer}\0").
    REM  Die Datei wird dabei geschlossen - ein Close-Befehl ist
    REM  danach nicht mehr nötig.

    CALL FATSBASIC("MB\1\0", ERRORCODE%, RECNO&, KEYLEN%)

  END IF

LOOP WHILE NOT EOF(1)


IF CURRECNO& = 0 THEN

  PRINT
  PRINT "Die Datendatei KUNDEN.DAT existiert nicht oder enthält keine"
  PRINT "Datensätze. Bitte generieren Sie diese Datei mit dem Test-"
  PRINT "programm TST0GER7.BAS oder TST1GER7.BAS"

  GOTO ENDE

END IF


REM  ========================================================================
REM            Matchcode Suche
REM  ========================================================================


REM  -------> Matchcode Datei öffnen
REM
REM  Mit dem Befehl  "O" Open Indexfile wird eine Matchcode-
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.

CALL FATSBASIC("O\KUNDEN.FTS\1", ERRORCODE%, RECNO&, KEYLEN%)


REM  -------> In der Suchgruppe 1 (NAME) suchen
REM
REM  Der Befehl  "MS" Search in Matchcode führt eine Matchcode-Abfrage
REM  durch und erstellt eine Ergebnistabelle mit den Datensatz- bzw.
REM  ID-Nummern der Datensätze, welche die gesuchten Begriffe beinhalten.
REM  Bei erfolgreicher Verarbeitung (Errorcode == 0) wird der Applikation
REM  die Datensatz- bzw. ID-Nummer des ersten Treffers über die Variable
REM  "dwRecno" zur weiteren Verarbeitung zur Verfügung gestellt.
REM  Die Ergebnistabelle kann anschließend mit den Browserbefehlen
REM  ("MA", "ME", "MN", "MP" etc.) ausgelesen werden.
REM
REM  Der Aufbau des Kommandostrings:
REM
REM    szCmnd = "MS\{FileNo}\{Flags}\{Total}\{SearchGrp1}[\{SearchGrp2}...]"
REM
REM      FileNo     Nummer der Indexdatei
REM
REM      Flags      Der Suchvorgang kann durch die Angabe verschiedener
REM                 Flags beeinflußt werden. Eine Beschreibung der Flags
REM                 finden Sie in der Befehlsreferenz.
REM
REM      Total      Maximale Anzahl Treffer in der Ergebnistabelle:
REM
REM                   0   Es werden alle Treffer in die Ergebnistabelle
REM                       gestellt. Diese Einstellung arbeitet sehr schnell,
REM                       es findet aber auch keine Sortierung anhand der
REM                       Trefferqualität statt.
REM
REM                 > 0   Es wird versucht, die angegebene Anzahl Treffer in
REM                       die Ergebnistabelle zu stellen. Diese Treffer werden
REM                       einer Sortierung bezüglich ihrer Qualität unterzogen
REM                       und dann in eine von 7 Sortiergruppen eingeordnet.
REM
REM      SearchGrp#  Hier werden die in der Suchgruppe # gesuchten Begriffe
REM                  angegeben.
REM
REM  Für die Auswertung der Ergebnistabelle können abhängig von der
REM  Programmlogik verschiedene FATS-Befehle verwendet werden.
REM  In dem folgenden Beispiel werden alle Treffer auf den Bildschirm
REM  ausgegeben:

PRINT
PRINT "Es wird jetzt in der Suchgruppe 1 (NAME) nach GMBH gesucht"
PRINT
INPUT "Bitte [ENTER] drücken...", X$
PRINT

CMND$ = "MS\1\\0\GMBH"

DO

  CALL FATSBASIC(CMND$, ERRORCODE%, RECNO&, KEYLEN%)
  IF ERRORCODE% <> 0 THEN EXIT DO

  GET #1, RECNO&
  PRINT NAME$; " | "; BRANCHE$
  PRINT PLZ$; " "; ORT$; " (#"; RECNO&; ")"
  PRINT

  CMND$ = "MA\1\" + STR$(RECNO&)

LOOP WHILE NOT ERRORCODE%


REM  --------> Verknüpfte Suche über Branche / Ort

PRINT
PRINT "Es wird jetzt eine verknüpfte Suche über die Suchgruppen"
PRINT "2 (Branche) und 3 (PLZ, Ort) gestartet."
PRINT "Gesucht werden alle GROßHANDlungen in STUTTgart."
PRINT
INPUT "Bitte [ENTER] drücken...", X$
PRINT

CMND$ = "MS\1\\0\\großhand\stutt"

DO

  CALL FATSBASIC(CMND$, ERRORCODE%, RECNO&, KEYLEN%)
  IF ERRORCODE% <> 0 THEN EXIT DO

  GET #1, RECNO&
  PRINT NAME$; " | "; BRANCHE$
  PRINT PLZ$; " "; ORT$; " (#"; RECNO&; ")"
  PRINT

  CMND$ = "MA\1\" + STR$(RECNO&)

LOOP WHILE NOT ERRORCODE%


REM  --------> Matchcode Datei schließen

CALL FATSBASIC("K\1", ERRORCODE%, RECNO&, KEYLEN%)

ENDE:

CLOSE #1

© 2008  GCS Software, Udo Gertz