unit Vok;
interface
uses
StdCtrls, IniFiles, SysUtils, Dialogs;
const
E_LOADVOK = '
Error in FUNCTION LoadVok ';
E_WRITEVOK = '
Error in FUNCTION WriteVok ';
E_READVOK = '
Error in FUNCTION ReadVok ';
E_COMPVOK = '
Error in FUNCTION CompVok ';
type
TVok =
class
public
Vokabel:
array of array of String;
// Dynamischer Array in dem die Vokabeln abgelegt werden
VokRiZ:
array of array[0..1]
of byte;
// Hier wird gezählt wie oft eine Vokabel richtig war
VokFaZ:
array of array[0..1]
of byte;
// Hier wird gezählt wie oft eine Vokabel falsch war
Vokakt: integer;
// Aktuelle Vokabel
IniFile: TIniFile;
// Name der Aktuellen Vokabel Datei
VokAbf: smallint;
// Enthält die Nummer der abgefragten bedeutung
(* Allgemein:
Sollte ein Fehler beim laden auftreten gibt die funktion den
Wert False zurück *)
function LoadVok(FileN:
String): Boolean;
// Laden der Vokabeln
function WriteVok(FileN:
String): Boolean;
// Speichert Vokabeln
function ReadVok(InpField: TEdit; OutField: TLabel): Boolean;
// Liest nexte Vokabel ein
function CompVok(VString: ShortString;
var IX: Smallint): Boolean;
// vergleicht die Vokabeln
end;
implementation
var Voktype: TVok;
function TVok.LoadVok(FileN:
String): Boolean;
var
VNum: integer;
VBed: smallint;
begin
try
(*BEGIN*)
Voktype.IniFile := TiniFile.Create(FileN);
for VNum:=0
to 2147483647
do begin // Max Anzahl an Vokabeln werden hochgezählt
for VBed:=0
to 32767
do begin // Max Anzahl an Bedeutungen pro Vokabel werden hochgezählt
Voktype.Vokabel[VNum,VBed] := IniFile.ReadString(inttoStr(VNum),inttoStr(VBed),'
');
// Läd Vokabeln
if Voktype.Vokabel[VNum,VBed] = '
'
then Break;
// Wenn Alle Bedeutungen geladen wurden Unterbrechen
end;
if Voktype.Vokabel[VNum -1,0] = '
'
then Break;
// Wenn Max Anzahl an Vokabeln geladen wurden Unterbreche
end;
(*END*)
Result := True;
except
Result := False;
end;
end;
function TVok.WriteVok(FileN:
String): Boolean;
var
VNum: integer;
VBed: smallint;
begin
try
(*BEGIN*)
Voktype.IniFile := TiniFile.Create(FileN);
for VNum:=0
to 2147483647
do begin // Max Anzahl an Vokabeln werden hochgezählt
for VBed:=0
to 32767
do begin // Max Anzahl an Bedeutungen pro Vokabel werden hochgezählt
IniFile.WriteString(inttoStr(VNum),inttoStr(VBed),Voktype.Vokabel[VNum,VBed]);
// Schreibt Vokabeln
if Voktype.Vokabel[VNum,VBed +1] = '
'
then Break;
// Wenn Alle Bedeutungen geladen wurden Unterbrechen
end;
if Voktype.Vokabel[VNum +1,0] = '
'
then Break;
// Wenn Max Anzahl an Vokabeln geladen wurden Unterbreche
end;
(*END*)
Result := True;
except
Result := False;
end;
end;
function TVok.ReadVok(InpField: TEdit; OutField: TLabel): Boolean;
var
VOKNUM: smallint;
begin
try
(*BEGIN*)
if Voktype.CompVok(InpField.Text,VOKNUM) = False
then
MessageDlg(E_COMPVOK, mtWarning, [mbOk], 0);
// Sollte ein Fehler bei CompVok auftreten gibt es eine Fehlermessage
(*END*)
Result := True;
except
Result := False;
end;
end;
function TVok.CompVok(VString: ShortString;
var IX: Smallint): Boolean;
var
i: Smallint;
Ahigh: Smallint;
begin
try
(*BEGIN*)
Ahigh := high(Voktype.Vokabel[Voktype.VokAkt]);
// Ermittle die größe des Arrays
IX := -1;
for i:=0
to Ahigh
do begin
if VString = Voktype.Vokabel[Voktype.VokAkt,i]
then begin // Vergleiche den String mit dem Array
IX := i;
// Ergebniss wird ausgeliefert
Break;
end;
end;
(*END*)
Result := True;
except
Result := False;
end;
end;
end.