Registriert seit: 28. Jun 2003
Ort: Gelsenkirchen
337 Beiträge
Delphi 2005 Personal
|
Fehler im Sortier-Algorythmus
7. Okt 2004, 11:58
Hi Leute,
ich hab mir nach dem Bubblesort-Verfahren 'nen Algorythmus geschrieben, der Daten sortiert. Die Daten sind in der Form dd-mm-jj in einer Listbox gespeichert. Nun werden sie übernommen. Es wird zuerst das Jahr verglichen, dann der Monat und dann der Tag. Das früheste Datum soll als erstes in der sortierten Listbox erscheinen. Allerdings kommt immer der Fehler:
EStringListError: Das Maximum (7) wird überschritten
Kann mir einer sagen, wieso?
tia, gordon
Hier der Code:
Delphi-Quellcode:
////////////////////////////////////////////////////////////
//Die Einträge aus dem Übergebenen TString werden sortiert//
//und in die Form10.Listbox2 eingefügt //
////////////////////////////////////////////////////////////
procedure TForm10.BubbleSort(tStr:TStrings);
var tag1,monat1,jahr1,n,Zaehler1,Zaehler2:integer;
tag2,monat2,jahr2:integer;
tausch,s:string;
begin
n:=tstr.Count;
for Zaehler1 := n downto 2 do
for Zaehler2 := 1 to Zaehler1-1 do
begin
{Das Jahr wird aus 1 herausgeschnitten}
s:=tstr[Zaehler2];
delete(s,1,pos('-',s));
delete(s,1,pos('-',s));
jahr1:=strtoint(s);
{Der Monat wird aus 1 herausgeschnitten}
s:=tstr[Zaehler2];
delete(s,1,pos('-',s));
delete(s,pos('-',s),length(s));
monat1:=strtoint(s);
{Der Tag wird aus 1 herausgeschnitten}
s:=tstr[Zaehler2];
delete(s,pos('-',s),length(s));
tag1:=strtoint(s);
{Das Jahr wird aus 2 herausgeschnitten}
s:=tstr[Zaehler2+1];
delete(s,1,pos('-',s));
delete(s,1,pos('-',s));
jahr2:=strtoint(s);
{Der Monat wird aus 2 herausgeschnitten}
s:=tstr[Zaehler2+1];
delete(s,1,pos('-',s));
delete(s,pos('-',s),length(s));
monat2:=strtoint(s);
{Der Tag wird aus 2 herausgeschnitten}
s:=tstr[Zaehler2+1];
delete(s,pos('-',s),length(s));
tag2:=strtoint(s);
if jahr1 > jahr2 then //Ist Jahr 1 Später als 2
begin //Ja, sie werden getauscht
tausch:=tStr[Zaehler2];
tStr[Zaehler2]:=tStr[Zaehler2+1];
tStr[Zaehler2+1]:=tausch;
end
else //Nein, Jahr 2 ist Später oder gleich 1
begin
if jahr1 = jahr2 then //Sind die Jahre gleich
begin //Ja
if monat1 > monat2 then //Ist Monat 1 größer als 2
begin //Ja, sie werden getauscht
tausch:=tStr[Zaehler2];
tStr[Zaehler2]:=tStr[Zaehler2+1];
tStr[Zaehler2+1]:=tausch;
end
else //Nein, Monat 2 ist später oder gleich 1
begin
if monat1 = monat2 then //Sind die Monate gleich
begin //Ja
if tag1 > tag2 then //Ist Tag 1 später als 2
begin //Ja, siw werden getauscht
tausch:=tStr[Zaehler2];
tStr[Zaehler2]:=tStr[Zaehler2+1];
tStr[Zaehler2+1]:=tausch;
end;
end;
end;
end;
end;
end;
Form10.ListBox2.Items:=tstr;
end;
/edit: @alcaeus Hab doch glatt vergessen, den Code zu posten Soll nich wieder vorkommen!
|