home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 02 / tricks / idxdemo.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-11-06  |  2.9 KB  |  98 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      IDXDEMO.PAS                       *)
  3. (*            (c) 1990 Horst Zein & TOOLBOX               *)
  4. (* ------------------------------------------------------ *)
  5. PROGRAM IndexDemo;
  6.  
  7. USES
  8.   Crt, Index;
  9.  
  10. TYPE
  11.   Daten       = RECORD
  12.                   Nr   : LONGINT;
  13.                   Name : STRING [20];
  14.                 END;
  15.  
  16. VAR
  17.   c           : CHAR;
  18.   d           : Daten;
  19.   dFile       : FILE OF Daten;
  20.   DateiNr     : BYTE;
  21.   Ende, Exist : BOOLEAN;
  22.  
  23. BEGIN
  24.   ClrScr;
  25.   DateiNr := 3;
  26.   GotoXY(28, 1);  Write('*** Erfassungs - Demo ***');
  27.   GotoXY(11, 5);  Write('Nummer  :');
  28.   GotoXY(11, 7);  Write('Name    :');
  29.   Assign(dFile, 'DATEN.DAT');
  30.   {$I-}
  31.   Reset(dFile);
  32.   {$I+}
  33.   IF IOResult > 0 THEN
  34.     Rewrite(dFile);                { Neuanlage bei 1. Lauf }
  35.   Assign(Kette, 'DATEN.IDX');
  36.   ReadKette;
  37.   Ende := FALSE;
  38.   REPEAT
  39.     GotoXY(26,15);  ClrEol;  Write('Nummer = 0 --> Ende');
  40.     GotoXY(21, 7);  ClrEol;
  41.     GotoXY(21, 5);  ClrEol;  ReadLn(d.nr);
  42.     Ende := d.nr = 0;
  43.     IF NOT Ende THEN BEGIN
  44.       Exist := FindKey(DateiNr, d.nr); { Suche erfolgreich? }
  45.       IF Exist THEN BEGIN
  46.         Seek(dFile, Find^.RecNo);
  47.         Read(dFile, d);
  48.         GotoXY(51, 7);  Write('alt : ', d.name);
  49.         GotoXY(26,15);  Write('0 --> Satz löschen ');
  50.       END;
  51.       GotoXY(21, 7);  ReadLn(d.name);
  52.       IF d.name = '0' THEN
  53.         DelKey(DateiNr, Find)   { find steht auf akt. Satz }
  54.       ELSE BEGIN
  55.         IF NOT Exist THEN BEGIN
  56.           s.RecNo := FileSize(dFile);
  57.           s.Key   := d.nr;
  58.           AddKey(DateiNr, s);    { nachdem s gefüllt wurde }
  59.         END ELSE
  60.           s.RecNo := Find^.RecNo;
  61.         WHILE Length(d.Name) < 20 DO     { für Ausgabe mit }
  62.           d.Name := d.Name + ' ';        { Space auffüllen }
  63.         Seek(dFile, s.RecNo);  Write(dFile, d);
  64.       END;
  65.     END;
  66.   UNTIL Ende;
  67.  
  68.   GotoXY(28, 1);  Write ('*** Satzausgabe - Demo ***');
  69.   Find := Root[DateiNr];                     { Init. nötig }
  70.   Seek(dFile, Find^.RecNo);  Read(dFile, d);
  71.   GotoXY(6, 15);
  72.   Write(Chr(24):5, ' --> voriger Satz',
  73.         chr(25):5, ' --> nächster Satz',
  74.         'ESC'  :7, ' --> Ende');
  75.   REPEAT
  76.     GotoXY(21, 5);  ClrEol;  Write(d.Nr);
  77.     GotoXY(21, 7);  ClrEol;  Write(d.Name);
  78.     REPEAT
  79.       c := ReadKey;
  80.       IF c = #0 THEN
  81.         c := ReadKey
  82.       ELSE IF c <> #27 THEN
  83.         c := #0;
  84.     UNTIL (c = #27) OR (c = #72) OR (c =#80);
  85.     Ende := c = #27;
  86.     IF NOT Ende THEN BEGIN
  87.       IF c = #72 then
  88.         Find := PrevKey(DateiNr, Find);
  89.       IF c = #80 THEN
  90.         Find := NextKey(DateiNr, Find);
  91.       Seek(dFile, Find^.RecNo);  Read(dFile, d);
  92.     END;
  93.   UNTIL Ende;
  94.   Close(dFile);  WriteKette;  ClrScr;
  95. END.
  96. (* ------------------------------------------------------ *)
  97. (*                Ende von IDXDEMO.PAS                    *)
  98.