|
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. 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:
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 (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