home *** CD-ROM | disk | FTP | other *** search
- (*------------------------------------------------------------*)
- (* ADREWA1.INC *)
- (* Erste Include-Datei zur Adressverwaltung *)
- (*------------------------------------------------------------*)
- (* Dateiposition eines Datensatzes in der Indextabelle suchen *)
- FUNCTION SucheIndex(Name : tSchluessel;
- VAR Start : INTEGER) : INTEGER;
-
- VAR i, MaxZahl : INTEGER;
- Gefunden : BOOLEAN;
-
- BEGIN
- (* Anzahl Datensaetze bestimmen *)
- MaxZahl := FileSize(Datenfile);
- i := Start;
- Gefunden := FALSE;
- WHILE ((i <= MaxZahl) AND NOT(Gefunden)) DO
- BEGIN
- Gefunden := (Indexfeld[i].Schluessel=Name);
- i := i + 1;
- END;
- IF Gefunden THEN BEGIN
- SucheIndex := Indexfeld[i-1].RecNr;
- Start := i-1;
- END
- ELSE
- SucheIndex := -1;
- (* Rueckgabe -1 signalisiert NICHT GEFUNDEN *)
- END;
-
- (*------------------------------------------------------------*)
- (* Frage wiederholen bis 'j' oder 'n' geantwortet wird. *)
- (* Wenn Antwort = 'j' TRUE zurueckgeben. *)
- FUNCTION JaNein(Frage : tEintrag) : BOOLEAN;
-
- VAR Wahl : CHAR;
-
- BEGIN
- REPEAT
- Write(Frage,'?'); ReadLn(Wahl);
- UNTIL (Wahl IN ['j','J','n','N']);
- JaNein := (Wahl IN ['j','J']);
- END;
-
- (*------------------------------------------------------------*)
- (* Ueberpruefen ob eine Datei schon existiert *)
- FUNCTION FileExist(Name : tEintrag) : BOOLEAN;
-
- VAR f : FILE;
-
- BEGIN
- Assign(f,Name);
- (*$I-*)
- ReSet(f);
- (*$I+*)
- FileExist := (IOResult = 0);
- END;
-
- (*------------------------------------------------------------*)
- (* Adressdatei oeffnen (neu anlegen) *)
- PROCEDURE Oeffnen;
-
- VAR Name : STRING[8];
- exist : BOOLEAN;
- i : INTEGER;
-
- BEGIN
- ClrScr;
- SchreibeUeberschrift('Datei Oeffnen');
- WriteLn; WriteLn; WriteLn;
- IF JaNein('Ggf. noch offene Datei schon geschlossen (j/n) ')
- THEN BEGIN
- WriteLn;
- IF JaNein('Vorhandene Datei benutzen (j/n) ') THEN BEGIN
- WriteLn; WriteLn;
- REPEAT
- Write('Dateiname: '); ReadLn(Name);
- exist := FileExist(Concat(Name,'.DAT'));
- IF NOT exist THEN
- WriteLn('Datei existiert nicht !');
- UNTIL (exist OR (Name = ''));
- IF (Name <> '') THEN BEGIN
- Assign(Datenfile,Concat(Name,'.DAT'));
- ReSet(Datenfile);
- Assign(Indexfile,Concat(Name,'.IND'));
- ReSet(Indexfile);
- IF (FileSize(Indexfile) > 0) THEN
- Read(Indexfile,Indexfeld); (* Indextabelle einlesen *)
- END;
- END
- ELSE BEGIN (* Neue Dateien anlegen *)
- Write('Dateiname: '); ReadLn(Name);
- Assign(Datenfile,Concat(Name,'.DAT'));
- ReWrite(Datenfile);
- Assign(Indexfile,Concat(Name,'.IND'));
- ReWrite(Indexfile);
- (* Indexfeld initialisieren *)
- FOR i := 1 TO MaxDaten DO
- Indexfeld[i].Schluessel := '@';
- END;
- END;
- END;
-
- (*------------------------------------------------------------*)
- (* Adressdatei schliessen *)
- PROCEDURE Schliessen;
-
- VAR Name : STRING[8];
- temp : tDatenfile;
- i1, i2 : INTEGER;
-
- BEGIN
- ClrScr;
- SchreibeUeberschrift('Datei Schliessen');
- WriteLn; WriteLn; WriteLn;
- (* Temporaere Datei oeffnen; ungueltige Datensaetze loeschen *)
- Assign(temp,'TEMP.TMP');
- ReWrite(temp);
- ReSet(Datenfile);
- (* GUELTIGE Datensaetze nach 'temp' uebertragen *)
- WHILE NOT Eof(Datenfile) DO BEGIN
- Read(Datenfile,Datensatz);
- IF Datensatz.Name <> '@' THEN
- Write(temp,Datensatz);
- END;
- (* Wieder zurueck zu Datenfile *)
- ReSet(temp); ReWrite(Datenfile);
- WHILE NOT Eof(temp) DO BEGIN
- Read(temp,Datensatz);
- Write(Datenfile,Datensatz);
- END;
- Close(temp); Erase(temp); (* Temp loeschen *)
- Close(Datenfile); (* Datei schliessen *)
- (* Indexfeld sichern, ungueltige Eintraege loeschen *)
- i1 := 1;
- FOR i2 := 1 TO MaxDaten DO
- IF Indexfeld[i2].Schluessel <> '@' THEN BEGIN
- Indexfeld[i1] := Indexfeld[i2];
- i1 := i1 + 1;
- END;
- ReWrite(Indexfile);
- Write(Indexfile,Indexfeld);
- Close(Indexfile);
- END;
-
- (*------------------------------------------------------------*)
- (* Einen Datensatz einfuegen *)
- PROCEDURE Einfuegen(Datensatz : tDatensatz);
-
- VAR Pos : INTEGER;
-
- BEGIN
- (* Auf Dateiende positionieren *)
- Pos := FileSize(Datenfile);
- Seek(Datenfile,Pos);
- Write(Datenfile,Datensatz);
- Indexfeld[Pos + 1].Schluessel := Datensatz.Name;
- Indexfeld[Pos + 1].RecNr := Pos;
- END;
-
- (*------------------------------------------------------------*)
- (* Ende ADREWA1.INC *)