| ![]() | ||||||||||||||||||||
Mit den 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 VB DOS Beispiel demonstriert die Verwendung der FATS Matchcode-Befehle:
 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.
| "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 (FATSXWE.EXE)"
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"
PRINT " LINK TST2_GER FATSXVBR.LIB"
PRINT
INPUT "Bitte [ENTER] drücken...", X$
PRINT
REM FATS Extended Workstation Engine starten/beenden:
REM
REM Starten: FATSXWE
REM Beenden: FATSXWE -unload
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
IF ERRORCODE% = -1 THEN
PRINT "FATS Workstation Engine ist nicht aktiviert."
PRINT "Bitte starten Sie die Engine durch Eingabe von FATSXWE"
ELSE
PRINT "FATS Fehlercode: "; ERRORCODE%; " (Kommando: MC)"
END IF
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 TST0_GER.BAS oder TST1_GER.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