FATS - Fast Access Tree System
Inhaltsverzeichnis
 Matchcode Befehle

Matchcode Befehle


 Einführung
 Funktionsweise
 Technische Daten
 Beispielprogramm


 

 
Einführung

Der Einsatz moderner Anwendungsprogramme erlaubt das Erfassen und Bearbeiten großer Datenmengen. Für den Anwender wird es daher immer schwieriger, in dem vorhandenen Datenbestand die für ihn relevanten Informationen zu finden.

Als Lösung bieten die Softwareprogramme in der Regel indexbasiertes Retrieval an, welches vom Programmierer z.B. durch ein Toolkit wie FATS realisiert werden kann. Es ermöglicht dem Anwender die Suche bestimmter Datensätze durch die Eingabe von Schlagwörtern bzw. Indizes, die den Datensätzen bei deren Erfassung zugeordnet wurden. Beispiele hierfür sind Artikelnummern zur Identifikation eines Artikel-Stammsatzes oder der Kunden-Nachname zur Suche im Kundenstamm.

Herkömmliche Suchverfahren haben daher folgende Nachteile:

FATS Extended bietet Ihnen mit den Matchcode Befehlen faszinierende neue Möglichkeiten, um die genannten Probleme bei der Datensuche zu überwinden.Mit Hilfe dieser Befehle können Sie Ihre Anwendungprogramme innerhalb weniger Stunden um eine Matchcode- bzw. Volltextsuche erweitern, die den Anwendern Ihrer Software eine natürliche, dem Menschen angepaßte Retrievalfunktion mit maximalem Komfort bietet.

Folgende Vorteile bietet die FATS-Matchcodesuche:


 

 
Funktionsweise

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.

Der Matchcode wurde auf Fragment- bzw. Wortfetzensuche optimiert, d.h. im Unterschied zu herkömmlichen Volltext-Suchsystemen nimmt die Geschwindigkeit bei der Suche nach Wortteilen nicht ab (Wortmitte, Wortende etc.).

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


 

 
Technische Daten


 

 
Beispielprogramm

Das nachfolgende Visual Basic Beispiel demonstriert die Verwendung der FATS Matchcode-Befehle. Auch wenn Sie mit einer anderen Programmiersprache arbeiten, sollten Sie die folgenden Erläuterungen durchlesen. Eine individuelle Beschreibung der Programmiersprachen-Schnittstellen finden Sie im Kapitel 9. Auf der FATS-Diskette finden Sie außerdem zu jeder Programmiersprache ein Beispielprogramm.

Die Matchcode Befehle sind nur in der erweiterten Version von FATS verfügbar.


 

 
Matchcode-Indexdatei erstellen

Der Matchcode-Index wird mit dem Befehl  Create Matchcode File (MC) erstellt. Dabei geben Sie die logischen Suchgruppen und deren Eigenschaften an. Eine Suchgruppe besteht aus dem Inhalt eines oder mehrerer Datenfelder, in denen bei Angabe der Suchbegriffe gemeinsam gesucht werden soll. Eine Matchcodedatei verwaltet bis zu 32 Suchgruppen, in denen bei späteren Abfragen "UND-verknüpft" gesucht werden kann.

In diesem Beispiel sollen einige Datenfelder eines Kundenstamms im Volltext indiziert werden. Der Datensatz hat dabei folgenden Aufbau:

Type kdat
   Loeschkennz As String * 1
   Anrede As String * 5
   Name As String * 25
   Branche As String * 25
   Strasse As String * 25
   Plz As String * 5
   Ort As String * 20
End Type

Die folgende Programmsequenz erstellt die Matchcode-Indexdatei "kunden.fms" mit den Suchgruppen Name (I1), Branche (I2) und Plz/Ort (I3):

szCmnd = "MC\kunden.fms\\1\I1\I2\I3"
dwRecno =  FATSCall(szCmnd, nErrorcode, nKeylen, 0)

Der Aufbau des Befehls:

CMND$ = "MC\FileName\Flags\FileNo\Col1def[\Col2def]"

FileNameName der Datei, eventuell mit Pfadangabe
(z.B. C:/DATEN/KUNDEN.FMS oder KUNDEN.FMS)
FlagsMomentan noch nicht benutzt
FileNoNummer der Indexdatei
Col#defDefinition der Datenspalte # (Flags, durch Komma getrennt).
Der Inhalt der entsprechenden Datenspalten wird später den Befehlen "MB", "MI" und "MD" in der durch diesen Befehl festgelegten Reihenfolge übergeben.
I#Spalteninhalt in der Suchgruppe # (1-32) indizieren. Sie können mehrere Spalten zu einer logischen Suchgruppe zusammenfassen (z.B. Vorname, Nachname).
An dieser Stelle sind noch weitere Einstellungen möglich, die ausführlich auf der Seite  Seite 4-56 beschrieben sind.


 

 
Matchcode generieren (Indizierung)

Nachdem die Datei definiert und erzeugt wurde, wird der Inhalt der Datensätze mit dem Befehl  Build Matchcode (MB) in die Datei eingefügt. Dabei dient die Definition, welche Sie über den Befehl  Create Matchcode File (MC) festgelegt haben, als Schablone für diesen Befehl.

Der Aufbau des Befehls:

CMND$ = "MB\FileNo\RecID\Col1data[\Col2data[\Col3data]]"

FileNoNummer der Indexdatei
RecID<> 0 Datensatz- bzw. ID-Nummer
== 0 Matchcode-Indizierung beenden
Col#data Inhalt der Datenspalte X
[ ]Optional

Der folgende Beispiel-Programmcode indiziert den Inhalt der gesamten Datendatei innerhalb einer Schleife:

dwDatensatzNr = 0

Do

 ' Datensatz in Puffer einlesen
 Get #1, dwDatensatzNr + 1, kunden

 If Not EOF(1) Then

   dwDatensatzNr = dwDatensatzNr + 1

   ' FATS-Kommandostring erstellen...

   szCmnd = "MB\1\" & Str$(dwDatensatzNr)

   If kunden.loeschkennz = " " Then

     szCmnd = szCmnd & "\" & RTrim$(kunden.Name)
     szCmnd = szCmnd & "\" & RTrim$(kunden.Branche)
     szCmnd = szCmnd & "\" & RTrim$(kunden.Plz & " " & kunden.Ort)
   End If

   dwRecno =  FATSCall(szCmnd, nErrorcode, nKeylen, 0)

   If nErrorcode <> 0 Then

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

     Print "FATS Fehlercode: "; nErrorcode; " (Befehl: MB)"
     Exit Do
   End If

 Else

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

   dwRecno =  FATSCall("MB\1\0", nErrorcode, nKeylen, 0)

 End If

Loop While Not EOF(1)


 

 
Matchcode-Indexdatei öffnen

Mit dem Befehl  Open Indexfile (O) wird eine Matchcodedatei mit den über den Befehl  Auto Refresh (Y) definierten Öffnungsflags geöffnet und der angegebenen Dateinummer zugewiesen. Diese Nummer muß bei allen nachfolgenden FATS-Befehlen angegeben werden, um mit der Indexdatei zu arbeiten.

CMND = "O\kunden.fms\1"
dwRecno =  FATSCall(szCmnd, nErrorcode, nKeylen, 0)


 

 
Suchen im Matchcode-Index

Der Befehl  Search in Matchcode (MS) führt eine Matchcode-Abfrage durch und erstellt eine Ergebnistabelle mit den Datensatz- bzw. ID-Nummern der Datensätze, welche die gesuchten Begriffe beinhalten. Bei erfolgreicher Verarbeitung (nErrorcode == 0) wird der Applikation die Datensatz- bzw. ID-Nummer des ersten Treffers über die Variable "dwRecno" zur weiteren Verarbeitung zur Verfügung gestellt. Die Ergebnistabelle kann anschließend mit den Browserbefehlen ( "MA",  "ME",  "MN",  "MP" etc.) ausgelesen werden.

Der folgende Programmcode übergibt der FATS-Matchcodesuche den Inhalt der Eingabefelder bzw. –strings szName (Suchgruppe 1), szBranche (Gruppe 2) und szPlzOrt (Gruppe 3: PLZ und Ort). FATS generiert daraufhin eine Ergebnistabelle der Datensätze, die alle gesuchten Begriffe beinhalten:

CMND = "MS\1\\0\" & szName & "\" & szBranche & "\" & szPlzOrt
dwRecno = FATSCall(szCmnd, nErrorcode, nKeylen, 0)

Der Aufbau des Befehls:

CMND$ = "MS\FileNo\Flags\Total\SearchGrp1[\SearchGrp2...]"

FileNoNummer der Indexdatei
FlagsDer Suchvorgang kann durch die Angabe verschiedener Flags beeinflußt werden. Eine Beschreibung der Flags finden Sie in der  Befehlsreferenz
TotalMaximale Anzahl Treffer in der Ergebnistabelle:
0Es werden alle Treffer in die Ergebnistabelle gestellt. Diese Einstellung arbeitet sehr schnell, es findet aber auch keine Sortierung anhand der Trefferqualität statt.
> 0Es wird versucht, die angegebene Anzahl Treffer in die Ergebnistabelle zu stellen. Diese Treffer werden einer Sortierung bezüglich ihrer Qualität unterzogen und dann in eine von  7 Sortiergruppen eingeordnet.
SearchGrp#Hier werden die in der Suchgruppe # gesuchten Begriffe angegeben.


 

 
Auswertung der Ergebnistabelle

Für die Auswertung der Ergebnistabelle können abhängig von der Programmlogik verschiedene FATS-Befehle verwendet werden. In dem folgenden Beispiel werden alle Treffer in einer Visual-Basic Listbox ausgegeben:

' Die Satznummer des ersten Treffers steht bereits in der
' dwRecno-Variable (siehe oben)

Do

 ' Datensatz laden und in Liste ausgeben.
 Get #1, dwRecno, kunden
 Liste.AddItem kunden.Name & " | " & kunden.Plz & " " & kunden.Ort

 ' Nächsten Treffer mit dem "MN"-Befehl (Next Result) ermitteln
 dwRecno = FATSCall("MN\1", nErrorcode, nKeylen, 0)

Loop While nErrorcode = 0

Folgende Befehle werden von FATS angeboten:

 Get First Result; Seite 4-66
 Get Last Result; Seite 4-71
 Get Previous Result; Seite 4-75
 Get Next Result; Seite 4-73
 Get Next Result After; Seite 4-51
 Get Previous Result Before; Seite 4-64


 

 
Einfügen eines neuen Datensatzes

Bei der Neuanlage eines Datensatzes kann der Befehl  "MI" angewendet werden, um den Matchcode-Index zu aktualisieren:

CMND$ = "MI\FileNo\RecID\Col1data[\Col2data[\Col3data]]"

FileNoNummer der Indexdatei
RecIDDatensatz- bzw. ID-Nummer
Col#data Inhalt der Datenspalte X
[ ]Optional

Dieser Befehl fügt den Inhalt der Datenspalten ("Col#data") des über "RecID" spezifizierten Datensatzes dem Matchcode Index hinzu.

Die Position der Datenspalten ("Col#data") innerhalb des Kommandostrings entspricht der beim Aufruf des Befehls  Create Matchcode File (MC) festgelegten Definition. Die Syntax des Kommandostrings entspricht der des Befehls  Build Matchcode (MB).

Beispiel:

szCmnd = "MI\1\" & Str$(dwDatensatzNr)
szCmnd = szCmnd & "\" & RTrim$(kunden.Name)
szCmnd = szCmnd & "\" & RTrim$(kunden.Branche)
szCmnd = szCmnd & "\" & RTrim$(kunden.Plz & " " & kunden.Ort)
dwRecno =  FATSCall(szCmnd, nErrorcode, nKeylen, 0)


 

 
Löschen eines Datensatzes

Beim Entfernen eines Datensatzes aus der Datendatei sollte auch der Matchcode-Index aktualisiert werden. Dafür steht Befehl  "MD" zur Verfügung. Die Syntax des Kommandostrings enspricht der des  "MI"-Befehls.

szCmnd = "MD\1\" & Str$(dwDatensatzNr)
szCmnd = szCmnd & "\" & RTrim$(kunden.Name)
szCmnd = szCmnd & "\" & RTrim$(kunden.Branche)
szCmnd = szCmnd & "\" & RTrim$(kunden.Plz & " " & kunden.Ort)
dwRecno =  FATSCall(szCmnd, nErrorcode, nKeylen, 0)


 

 
Änderung eines Datensatzes

Bei der Änderung eines bereits indizierten Datensatzes wird zuerst mit dem Befehl  Delete Matchcode (MD) dessen bisheriger Inhalt (vor der Änderung) aus dem Matchcode-Index entfernt, bevor der neue Inhalt mit dem Befehl  Insert Matchcode (MI) wieder eingefügt wird. Im nachfolgenden Beispiel wird daher bereits vor der Änderung des Datensatzes ein Kommandostring gebildet:

' Bisherigen Inhalt des Datensatzes sichern
szAlt = RTrim$(kunden.Name)
szAlt = szAlt & "\" & RTrim$(kunden.Branche)
szAlt = szAlt & "\" & RTrim$(kunden.Plz) & " " & RTrim$(kunden.Ort)

' Datensatz ändern
Call DatensatzAenderung

szNeu = RTrim$(kunden.Name)
szNeu = szNeu & "\" & RTrim$(kunden.Branche)
szNeu = szNeu & "\" & RTrim$(kunden.Plz) & " " & RTrim$(kunden.Ort)

If szAlt <> szNeu Then

 szCmnd = "MD\1\" & Str$(dwSatznummer) & "\" & szAlt
 dwRecno =  FATSCall(szCmnd, nErrorcode, nKeylen, 0)
 szCmnd = "MI\1\" & Str$(dwSatznummer) & "\" & szNeu
 dwRecno =  FATSCall(szCmnd, nErrorcode, nKeylen, 0)

End If


 

 
Matchcode-Indexdatei schließen

Die Matchcode-Indexdatei schließen Sie mit dem Befehl  Close Indexfile (K).

dwRecno =  FATSCall("K\1", nErrorcode, nKeylen, 0)


 

© 2008  GCS Software, Udo Gertz