| ![]() | ||||||||||||||||||||
Das nachfolgende Microsoft Pascal Beispiel demonstriert die Verwendung der von FATS bereitgestellten
 Index-Befehle:
(*
FATS 02.30
(c) GCS Software, Udo Gertz 1993-1998
Testprogramm (Microsoft Pascal, IBM Pascal)
Schnelle Re-Indizierung (Befehl "XB")
Es wird die erweiterte FATS Version benötigt.
19-03-2009 U.Gertz
*)
program REINDGER (input, output);
type
kundenrec = record
LOESCHKENNZ: char;
ANREDE: lstring(5);
NAME: lstring(25);
BRANCHE: lstring(25);
STRASSE: lstring(25);
PLZ: lstring(5);
ORT: lstring(20);
end;
const
fn_cust = 'KUNDEN.DAT';
var
hKunden: file of kundenrec;
kpuffer: kundenrec;
szCmnd: lstring(255);
szFATSkey: lstring(255);
szRecno: lstring(8);
uFATSError: word;
dwFATSRecno: integer4;
dwRecords: integer4;
function FATSCALL (vars szCmnd: lstring; vars nErrorcode: word;
vars szReturnKey: lstring) : integer4; extern;
begin
assign (hKunden, fn_cust);
hKunden.mode:=direct;
reset (hKunden);
(*
-------> Indexdatei erstellen
*)
(*
"C" Create Indexfile
Mit diesem Befehl erstellen Sie eine Indexdatei, wobei eine
eventuell bereits vorhandene Datei mit demselben Dateinamen
gelöscht wird.
Die Indexdatei wird dabei gleichzeitig mit den über den
Befehl Auto Refresh (Y) definierten Öffnungsflags geöffnet
und der Dateinummer "FileNo" zugewiesen. Diese Nummer muß bei
allen nachfolgenden FATS-Befehlen angegeben werden, um mit
der Indexdatei zu arbeiten.
Maximal 200 Schlüssel pro Datensatz können in einer Indexdatei
verwaltet werden, wobei die maximale Schlüssellänge 240 Zeichen
beträgt.
Beachten Sie bei der Dateipfadangabe, daß der Backslash (\) von
FATS als Trennzeichen behandelt wird und daher im Pfad durch
einen normalen Schrägstrich ersetzt werden sollte.
Alternativ dazu können Sie auch das Trennzeichen 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 als 48 sein).
Der Aufbau des Kommandostrings:
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)
*)
szCmnd:='C\KUNDEN.KEY\25\3\A\1';
dwFATSRecno:=FATSCALL(szCmnd, uFATSError, szFATSkey);
If uFATSError <> 0 Then Begin
writeln;
If uFATSError = -1 Then Begin
writeln ('FATS Workstation Engine ist nicht aktiviert.');
writeln ('Bitte starten Sie die Engine durch Eingabe von FATSXWE');
End Else Begin
write ('FATS Fehler: '); write (uFATSError);
writeln (' (Befehl: C)');
writeln;
End;
close( hKunden );
Return;
End;
(*
========================================================================
Indexdatei wiederherstellen
========================================================================
*)
dwRecords:=0;
repeat
seek(hKunden, dwRecords + 1);
get(hKunden);
kpuffer:=hKunden^;
If EOF( hKunden ) Then Begin
(*
Nachdem der letzte Datensatz indiziert wurde, wird die
Indizierung durch die Angabe einer Null anstelle einer
gültigen Datensatznummer beendet ("XB\{Dateinummer}\0").
Die Datei wird dabei geschlossen - ein Close-Befehl ist
danach nicht mehr nötig.
*)
szCmnd:='XB\1\0';
dwFATSRecno:=FATSCALL(szCmnd, uFATSError, szFATSkey);
break;
End;
dwRecords:=dwRecords + 1;
If kpuffer.LOESCHKENNZ = ' ' Then Begin
(*
"XB" Re-Indexing: Build
Diesem Befehl wird die im Befehl "C" angegebene Anzahl
Schlüssel im Kommandostring übergeben. Die Schlüssel
werden in die Indexdatei einsortiert und der Satznummer
"RecNo" zugeordnet.
Verwenden Sie diesen Befehl, um nach einem erfolgreichen
"Create Indexfile" (C) - Befehl innerhalb einer
Programmschleife die Schlüssel aller Datensätze in den
Index einzufügen.
Der Befehl steht nur bei einer Re-Indizierung bereit, d.h.
unmittelbar nach Ausführung des "C"-Kommandos, spätere
Änderungen am Index werden z.B. über den Insert Record (I)
Befehl realisiert.
Das Kommando "XB\{FileNo}\0" beendet die Re-Indizierung und
schließt die entsprechende Indexdatei. Die Indexdatei wird bei
einem durch Fehler bedingten vorzeitigen Abbruch der Re-Indizierung
automatisch geschlossen. In jedem Fall kann ein anschließendes
Close-Kommando unterbleiben.
Die Länge der übergebenen Schlüssel darf die beim "Create
Indexfile" (C) angegebene Länge nicht überschreiten, kürzere
Schlüssel werden mit dem ASCII-Zeichen 00h auf die maximale
Schlüssellänge erweitert.
Der Aufbau des Kommandostrings:
szCmnd = "XB\{FileNo}\{RecNo}\{KeyStr1}[\{KeyStr2}]"
FileNo Nummer der Indexdatei
RecNo <> 0 Datensatznummer
== 0 Re-Indizierung beenden
KeyStr# Schlüssel
*)
szCmnd:='XB\1\';
If encode(szRecno, dwRecords:8) Then concat(szCmnd, szRecno);
concat (szCmnd, '\');
concat(szCmnd, kpuffer.NAME);
concat(szCmnd, '\');
concat(szCmnd, kpuffer.BRANCHE);
concat(szCmnd, '\');
concat(szCmnd, kpuffer.PLZ);
concat(szCmnd, kpuffer.ORT);
End Else Begin
(*
Datensatz als "Gelöscht" markieren
*)
szCmnd:='DL\';
If encode(szRecno, dwRecords:8) Then concat(szCmnd, szRecno);
concat (szCmnd, '\S\1');
End;
dwFATSRecno:=FATSCALL(szCmnd, uFATSError, szFATSkey);
until uFATSError <> 0;
close(hKunden);
end.
© 2008
GCS Software, Udo Gertz