FATS - Fast Access Tree System
Inhaltsverzeichnis
 Einführung

Einführung


 Allgemeine Beschreibung
 Hardware- und Software-Voraussetzungen
 FABS Plus Kompatibilität
 Verwendung der Bibliothek


 
 
Allgemeine Beschreibung

Die Dateiverwaltung FATS ermöglicht Ihnen die unkomplizierte und schnelle Verwaltung großer Datenbestände mit Ihrer bevorzugten Programmiersprache.

Die von herkömmlichen Compilern bereitgestellten Möglichkeiten zur Organisation von Datendateien sind in den meisten Fällen nicht ausreichend. Das Speichern der Datensätze erfolgt in der Regel sequentiell, d.h. neue Datensätze werden an das Ende der Datei angefügt. Diese Methode ist zwar leicht zu implementieren, sie macht den Zugriff auf die einzelnen Datensätze jedoch ausgesprochen ineffizient, da zum Finden eines bestimmten Satzes im ungünstigsten Fall die komplette Datei sequentiell gelesen werden muß.

FATS erweitert die Fähigkeiten Ihrer Programmiersprache mit mächtigen Befehlen zum indexsequentiellen Zugriff auf Daten. Es bedient sich dabei einer modifizierten Variante des BTree+ Verfahrens. Durch dieses Verfahren und der Tatsache, daß FATS zu 100% in optimiertem Assemblercode geschrieben wurde, bleibt die Zugriffszeit auch bei mehreren Millionen Datensätzen konstant gering.

Beim indexsequentiellen Zugriff wird zusätzlich zur Datendatei, welche die eigentlichen Daten beinhaltet, eine zweite Datei angelegt, in der nur die für die Suche relevanten Teile der Datensätze, Schlüssel genannt, gespeichert werden. Die Datei stellt gewissermaßen ein Inhaltsverzeichnis der Datensätze dar, weshalb Sie auch Indexdatei genannt wird. Die komplette Verwaltung der Indexdatei nimmt Ihnen FATS ab, wodurch die Dateiverwaltung enorm simplifiziert wird.

Die Schlüssel in den Indexdateien liegen immer in sortierter Reihenfolge vor. Beim Einfügen oder Löschen von Schlüsseln wird die Indexdatei von FATS automatisch aktualisiert. Durch die optimierte Dateistruktur wirkt sich das jedoch nicht merklich auf das Zeitverhalten Ihrer Applikation aus.

Ihre gewohnte Programmierweise müssen Sie beim Einsatz von FATS nur gering ändern, da vorhandene Programmstrukturen beibehalten werden können. Die Kommunikation zwischen Ihrer Programmiersprache und FATS erfolgt über Kommandostrings mit eindeutiger Syntax und erfordert daher keine lange Einarbeitungszeit. Selbst die Entwicklung netzwerkfähiger Applikationen erfordert keinen nennenswerten Mehraufwand gegenüber Einzelplatzanwendungen.


 

 
Hardware- und Software-Voraussetzungen

Die FATS-Basisversion ist auf allen IBM PCs oder hundertprozentig kompatiblen Computern lauffähig. Als Betriebssystem wird MS-DOS, PC-DOS oder ein dazu kompatibles System vorausgesetzt. FATS wird auch für andere Betriebssysteme angeboten (z.B. Windows 3.x, Windows 32s, Windows 95, Windows NT, IBM OS2 1.x, IBM OS2 2.x/Warp, SCO-Unix, Sinix, Linux, Netware), bitte informieren Sie sich bei Ihrem Fachhändler. FATS unterstützt eine Reihe von Programmiersprachen, im Kapitel 9 finden Sie dazu eine Übersicht.


 

 
Fabs-Plus Kompatibilität

FATS ist aufrufkompatibel zu der Dateiverwaltung FABS PLUS, dadurch ist die Einbindung des Programmes in bestehende, auf FABS basierende Anwendungsprogramme ohne Quelltextänderungen durch Austausch der OBJ-Module erledigt.

Sämtliche Programmierschnittstellen dieser Software wurden nachgebildet. Sie können auch in Kombination mit den neuen verbesserten Schnittstellen von FATS verwendet werden, um so einen schrittweisen Umstieg zu ermöglichen.

Mit dem der Basisversion für PC-DOS/MS-DOS beiliegenden Konvertierprogramm sind Sie in der Lage, sämtliche im FABS Plus Format vorliegende Indexdateien in das neue Dateiformat von FATS zu konvertieren (siehe  Kapitel 6).

FABS-Schnittstellen in FATS.OBJ (in Klammern die absoluten Einsprungpunkte):

FABSB86BasicA, GWBasic etc. (Offset 5)
FABSMBBasic Compiler bis Version 6(Offset 8)
FBSPASIBM- / MS-Pascal(Offset 11)
GFSEGallgemein(Offset 14)
FBSFORFortran Compiler(Offset 17)
FBSCOBCobol Compiler(Offset 20)
FBPAS1MS-Pascal(Offset 23)
GFSEG1allgemein(Offset 26)
FBSSANYOSanyo-Basic(Offset 29)
KEYADRallgemein(Offset 42)

Weitere kompatible Schnittstellen wurden in die jeweiligen FATS-Module integriert und werden im Rahmen der Beschreibung der entsprechenden Programmiersprache erläutert (siehe Kapitel 9).


 

 
Verwendung der Bibliothek

Das nachfolgende Turbo Pascal Beispiel demonstriert die Verwendung von FATS. 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.

Alle von FATS zur Verfügung gestellten Befehle können mit einer Funktion ausgeführt werden:

function FATSCALL (var szCmnd:string; var nErrorcode: word; var szFatsKey:string): longint;

Die Bedeutung der einzelnen Parameter:

szCmndDieser String definiert den auszuführenden FATS-Befehl sowie die dazugehörenden Parameter.
nErrorcodeÜber diese Variable wird die Anwendung über Erfolg (0) oderMißerfolg (<> 0) der letzten FATS-Aktion unterrichtet.
szFatsKeyEin gefundener Schlüssel wird in diesem String gespeichert.

Daten- & Indexdatei erstellen

Am Programmanfang definieren Sie den Aufbau der Datendatei und vereinbaren einige Zugriffsvariablen:


{ Satzaufbau der Datendatei }
{ Mit dem Löschkennzeichen markieren Sie gelöschte Datensätze s.u. }

type

 kundenrec = record
     LOESCHKENNZ: char;
     ANREDE: string[5];
     NAME: string[25];
     BRANCHE: string[25];
     STRASSE: string[25];
     PLZ: string[5];
     ORT: string[20];
  end;

var
 kunden: file of kundenrec;{ Datendatei }
 kdrec: kundenrec;{ Datensatzpuffer }
 szCmnd: string;{ Befehlsstring }
 szFatsKey: string;{ Schlüsselstring von FATS }
 nErrorcode, word;{ Fehlercode von FATS }
 dwRecno: longint;{ Satznummer }


{ Datendatei erstellen }

assign  (kunden,"KUNDEN.DAT");
rewrite (kunden);

{ Indexdatei erstellen mit folgenden Schlüsseln:
  NAME, BRANCHE & PLZ + ORT }

szCmnd:='C\KUNDEN.KEY\25\3\A\1';
dwRecno:=FATSCALL(szCmnd, nErrorcode, szFatsKey);
Der Aufbau des Befehlsstrings:

szCmnd := "C\Filename\KeyLength\KeyCount\KeyType\FileNo";

"FileName"Name der Datei, eventuell mit Pfadangabe (z.B. C:/DATEN/ARTIKEL.KEY oder ARTIKEL.KEY)
"KeyLength"Maximale Länge der Schlüssel
"KeyCount"Anzahl Schlüssel (1-200)
"KeyType"Art der Schlüssel (A=ASCII Textschlüssel, I=Integer)
"FileNo"Nummer der Indexdatei (1-40)

Der umgekehrte Schrägstrich, auch Backslash genannt, dient bei der Definition des Befehlsstrings normalerweise als Trennzeichen. Sie können das Trennzeichen auch umdefinieren, indem Sie dieses als erstes Zeichen im Befehlsstring angeben, z.B. szCmnd := "&C&C:\ARTIKEL.KEY&1&1&A&1" (das Trennzeichen muß ein ASCII-Zeichen kleiner 48 sein).

Datensatz einfügen

Nachdem die Dateien erstellt sind, können Sie Datensätze einfügen:


{ Löschkennzeichen initialisieren }

kdrec.LOESCHKENNZ:=' ';

{ Schlüssel in Indexdatei einfügen}

szCmnd:='I\1\'+kdrec.NAME+'\'+kdrec.BRANCHE+'\'+kdrec.PLZ+kdrec.ORT;
dwRecno:=fatscall(szCmnd, nErrorcode, szFatsKey);

{ Datensatz in Datendatei einfügen }

if nErrorcode = 0 then begin
 seek(kunden, dwRecno -1); write(kunden,kdrec);
end;

Mit dem Befehl  Insert Record (I) werden die Schlüssel in die Indexdatei eingetragen. Sie erhalten daraufhin die Datensatznummer, unter der der Datensatz mit den herkömmlichen Befehlen SEEK & WRITE in die Datendatei eingefügt werden kann.

Datensatz suchen

Eine Reihe von FATS-Befehlen unterstützen Sie beim Suchen nach Datensätzen.Nachfolgend ein einfaches Beispiel:


Write('Bitte Kundenname eingeben: ');
ReadLn(szFatsKey);

{ Datensatz über ersten Schlüssel (NAME) suchen }

szCmnd:='S\1\1\'+szFatsKey;
dwRecno:=fatscall(szCmnd, nErrorcode , szFatsKey);

{ Datensatz laden }

seek(kunden, dwRecno - 1);
read(kunden, kdrec);

Datensatz ändern

Bei der Änderung von Datensätzen müssen auch die Schlüssel in der Indexdatei berücksichtigt werden:


{ Alte Schlüsselwerte merken }

key1:=kdrec.NAME;
key2:=kdrec.BRANCHE;
key3:=kdrec.PLZ+kdrec.ORT;
str(dwRecno, recnostr);

{ Änderungen vornehmen }

...

{ Kontrolle, ob sich die Schlüsselwerte geändert haben }

if key1 <> kdrec.NAME then begin
 szCmnd:="R\1\" + recnostr + "\1\" + key1 + "\"+kdrec.NAME;
 dwRecno:=fatscall(szCmnd, nErrorcode, szFatsKey); { Schlüssel aktualisieren }
end;{ dasselbe für die anderen Schlüssel }

.... und Datensatz abspeichern ....

Datensatz löschen


{ Datensatz löschen }

if nErrorcode = 0 then begin
 kdrec.LOESCHKENNZ:='D';{ Löschmarkierung }
 seek( kunden,  dwRecno - 1);
 write( kunden, kdrec );
end;

{Schlüssel löschen}

szCmnd:='D\'+recnostr+'\Y\1\'+kdrec.NAME+'\'+kdrec.BRANCHE+'\'
 +kdrec.PLZ+kdrec.ORT;
dwRecno:=fatscall(szCmnd, nErrorcode, szFatsKey);

Die Satznummer wird von FATS in eine Liste der bereits gelöschten Datensätze aufgenommen, damit der Befehl  Insert Record (I) diese eventuell wiederverwenden kann, bevor die Datendatei erweitert werden muß. Diese Liste wird nach dem Prinzip Last-In, First-Out verwaltet, d.h. der zuletzt gelöschte Satz wird als nächster wiederverwendet.

Daten- und Indexdatei schließen


close(kunden);

szCmnd:="K\1";{ Indexdatei Nr.1 schließen }
dwRecno:=fatscall(szCmnd, nErrorcode, szFatsKey);


 

© 2008  GCS Software, Udo Gertz