Hallo Sai!
Nun habe ich mal das alte Tp7 'rausgesucht. Beim Ausflug in die Vergangenheit habe ich mich dann ein wenig in alten Erinnerungen "festgelesen" - also hat es etwas länger gedauert. Dynamische Arrays hat es unter TP7 ja noch nicht gegeben, für die Speicherung der Datensätze hätte man damals also den Heap verwendet und eine verkettete Liste oder einen Baum angelegt. Das würde an dieser Stelle aber wohl zu weit gehen.
Wenn ich mich richtig erinnere, hast du unter TP7 nur 64 KBytes für alle Variablen zur Verfügung wenn du den Heap nicht benutzt. In Anbetracht der von dir genannten maximalen 100 Datensätze machen wir es am einfachsten so,
wie man es eigentlich nicht machen sollte:
In der
Unit deklarieren wir den DatenRecord, ein statisches Array um die Daten im
RAM zu halten und einen Datensatz-Zähler...
Delphi-Quellcode:
type tDataRec = record of
Name : String[aa]; // Länge eintragen!!
Rasse : String[bb]; // Länge eintragen!!
end;
var DataArray : Array[0..99] of tDataRec;
AnzData : Integer;
Dann brauchen wir eine Procedur, um die Daten in das Array einzulesen...
Delphi-Quellcode:
procedure ReadData;
var f : file of tDataRec;
Idx : Integer;
begin
Idx :=0;
AnzData:=0;
assign(f,FileName);
{$I-} reset(f); {$I+}
if IOresult=0 then begin
while not(eof(f)) do begin
read(f,DataArray[Idx]);
inc(Idx);
end;
close(f);
AnzData:=Idx;
end;
end;
Anschließend wird das Array sortiert. Habe dafür einen uralten, nicht rekursiven Quicksort gefunden und an unsere Aufgabenstellung angepasst, der unter TP7 funktionieren müsste...
Delphi-Quellcode:
procedure SortData;
{ Aufsteigend sortieren }
var s :
Array[1..20,1..2]
of Integer;
{ Typ : Record }
i,j,l,r,sp : Integer;
x :
String[aa];
// Länge eintragen!!
Hilf : tDataRec;
begin
sp:=1;
s[1,1]:=0;
s[1,2]:=AnzData-1;
while sp>0
do begin
l:=s[sp,1];
r:=s[sp,2];
dec(sp);
while r>l
do begin
i:=l;
j:=r;
x:=DataArray[(r+l)
div 2].
Name;
while i<=j
do begin
while (DataArray[i].
Name<x)
and (i<r)
do inc(i);
while (DataArray[j].
Name>x)
and (j>l)
do dec(j);
if i<=j
then begin
Hilf:=DataArray[i];
DataArray[i]:=DataArray[j];
DataArray[j]:=Hilf;
inc(i);
dec(j)
end;
end;
if (r-i) < (j-l)
then
if l<j
then begin inc(sp);s[sp,1]:=l;s[sp,2]:=j;l:=i
end
else l:=i
else
if i<r
then begin inc(sp);s[sp,1]:=i;s[sp,2]:=r;r:=j
end
else r:=j
end
end
end;
Nach einlesen und sortieren der Daten kannst du nun das Array auf dem Bildschirm ausgeben (Array von 0 bis AnzData-1 durchlaufen). Wenn du nach dem Einfügen von Datensätzen den Sort erneut aufrufst und die Daten speicherst, ist natürlich auch die Datei nach dem Namen sortiert.
Ich habe das obenstehende NICHT mit TP7 getestet - das ist nun dein Part. Eine Frage zum Schluss muss ich dann aber doch loswerden: Wieso machst du das mit Turbo Pascal?
Gruß Ralph