Autor Beitrag
lambruco
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Fr 06.06.03 09:20 
moin Forum,

ich hab mal wieder ein brett vor dem kopf und muss gestehen, dass ich bei Sortierverfahren immer geschlafen habe.
Hier mein problem:
ich lese aus einer Tabelle die Spaltenüberschriften und möcht diese mit
einer Liste vergleichen. Alle Namen die nicht identisch sind, sollen in
eine neue Stringliste. hier mein mieser Quellcode:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function TDatamodule2.VerifyTableName(TableName:String;sList:TStringlist):TStringList;
var
     i,j : Integer;
     sourceList,newTableList : TStringList;
begin
     sourceList := TStringList.create;
     newTableList := TStringList.Create;
     ADOConnection1.GetFieldNames(TableName,sourceList);
     for i :=0 to sourceList.Count-1 do
       begin
         for j :=0 to sList.count-1 do
           begin
            if AnsiCompareText(sList[j],sourceList[i])<> 0 then
              newTableList.Add(sList[j]);
           end;
       end;
     result := newTableList;
     sourceList.free;
     sList.free;
end;


Ich weiss selber, dass das nicht hinhaut, aber bei sortierverfahren bin ich echt ne Wurst.

gruss aus HH
Lars

Moderiert von user profile iconUGrohne: Delphi-Tags eingefügt
lambruco Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Fr 06.06.03 10:19 
Titel: Problem gelöst
das problem ist gelöst
lambruco Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Fr 06.06.03 13:13 
Titel: shit
problem ist doch nicht gelöst, hab mich zu früh gefreut.
mit anderen worten, ich brauche ein algorhythmus der zwei
stringlisten vergleicht und alle neuen strings in einer liste
speichert.
bin zu blöd für sowas, naja sind ja nur noch 4 stunden bis wochenende.

Zur Veranschaulichung:

Liste1 + Liste2 = NeueListe

test1.......test3........test4
test2.......test4........test5
test3.......test5
recall
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 449



BeitragVerfasst: Sa 23.08.03 09:02 
Hallo,

Sag' doch mal, was bei deinem ersten Code nicht hinhaut ?
Der sieht für mich nicht falsch aus ?!

Wenn du das schneller haben willst, dann wirds ein wenig kompliziert !
Du kannst beide Listen z.B. mit Quicksort sortieren, dann musst du nur noch folgendes machen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
List1     List2
aa        ab
ad        ad
ah        bk
bc        de
be        df
bk        dt
(Die sind also beide schon mit Quicksort NACH DEM ORDX-WERT sortiert worden.)

I1 := 0;
I2 := 0;
if Ordx(List1[I1])>Ordx(List2[I2]) then
  Inc(I2);
if Ordx(List1[I1])<Ordx(List2[I2]) then
  Inc(I1);
if Ordx(List1[I1])=Ordx(List2[I2]) then
begin
  NewList.Add(List1[I1]);
  Inc(I1);
  Inc(I2);
end;


Dieser Algo wird bei großen StringListen sehr viel schneller sein, als deiner. Du brauchst allerdings noch eine Funktion "Ordx", die einen brauchbaren Zahlenwert für Strings herausgibt. Dieser Zahlenwert muss nur eindeutig sein, d.h. für jeden String gibt es GENAU EINEN ordx-Wert.

Schau dir doch mal die Delphi-Beispiele an.
Quick-Sort, Bubble-Sort usw.
unter: Borland\Delphi x\Threads\"irgendwas".dpr
findest du die gängigsten 3 Sortier-Algorythmen.

Mit Quicksort müsstest du ja Vor-sortieren :!:

Viele Grüsse.