|
Allgemeine Beschreibung
Hardware- und Software-Voraussetzungen
FABS Plus Kompatibilität
Verwendung der Bibliothek
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.
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):
FABSB86 BasicA, GWBasic etc. (Offset 5) FABSMB Basic Compiler bis Version 6 (Offset 8) FBSPAS IBM- / MS-Pascal (Offset 11) GFSEG allgemein (Offset 14) FBSFOR Fortran Compiler (Offset 17) FBSCOB Cobol Compiler (Offset 20) FBPAS1 MS-Pascal (Offset 23) GFSEG1 allgemein (Offset 26) FBSSANYO Sanyo-Basic (Offset 29) KEYADR allgemein (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).
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:
szCmnd Dieser 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. szFatsKey Ein 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