Autor |
Beitrag |
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 28.09.07 11:19
wurzel hat folgendes geschrieben: | Ich hatte da ne Idee...man könnte ja i mit i2 vergleichen. Wenn i = i2, dann soll er i2 um 1 erhöhen. Aber das klappt nicht, da ich ne Variable einer FOR-Schleife nicht einfach so ändern kann. Wie kann ich das umgehen? Weil damir hätte ich den Vergleich mit sich selbst ausgeschaltet |
Es gibt Continue, damit wird die Schleife sofort mit dem nächsten Durchlauf fortgesetzt ohne den weiteren Code der aktuellen Schleife auszuführen. Vielleicht geht das damit, ich habe mir den Code nicht angesehen.
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Fr 28.09.07 11:22
jaenicke hat folgendes geschrieben: | wurzel hat folgendes geschrieben: | Ich hatte da ne Idee...man könnte ja i mit i2 vergleichen. Wenn i = i2, dann soll er i2 um 1 erhöhen. Aber das klappt nicht, da ich ne Variable einer FOR-Schleife nicht einfach so ändern kann. Wie kann ich das umgehen? Weil damir hätte ich den Vergleich mit sich selbst ausgeschaltet | Es gibt Continue, damit wird die Schleife sofort mit dem nächsten Durchlauf fortgesetzt ohne den weiteren Code der aktuellen Schleife auszuführen. Vielleicht geht das damit, ich habe mir den Code nicht angesehen. |
stimmt...
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| if listbox1.items.strings[i] = listbox1.items.strings[i2] then continue else begin end; |
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
wurzel 
      
Beiträge: 75
Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
|
Verfasst: Fr 28.09.07 12:25
Und wie's läuft
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure Tmainform.Button2Click(Sender: TObject); var l1, l2: TStringList; bl: TStringList; i, i2: Integer; begin l1:= TStringList.Create; l2:= TStringList.Create; bl:= TStringList.Create;
for i:= 0 to listbox1.Items.Count-1 do begin l1.LoadFromFile(listbox1.items.strings[i]); i2 := 0; repeat begin if i2 = i then i2 := i2 + 1; if i2 > listbox1.Items.Count -1 then exit; memo1.Lines.Add('Vergleiche: ' + listbox1.Items.Strings[i] + ' mit ' + listbox1.items.strings[i2]); memo1.lines.add(''); l2.loadfromfile(listbox1.items.strings[i2]);
bl.Clear;
if getDoppelte(l1, l2, bl) then begin if bl.Count <> 0 then memo1.Lines.add(bl.Text) else memo1.Lines.add('Kein doppelten Einträge'); end;
memo1.lines.add('=====================================================');
i2 := i2 + 1; end; until (i2 = listbox1.Items.Count); end; l1.Free; l2.Free; bl.Free; end; |
THX
_________________ "Könntest du deinen Egotrip mal kurz unterbrechen? Es ist was wichtiges passiert." - "Wenn es irgendwas wichtigeres als mein Ego gibt, verlange ich, dass man es auf der Stelle verhaftet und erschießt."
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Fr 28.09.07 13:21
Hallo,
wird hier nicht doppelt untersucht?
1 mit 3 und später 3 mit 1
(Man denke an BubbleSort: was ich schon weiß, brauche ich nicht nochmals abfragen )
Es reicht doch
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| For i1 := 0 to DateiListe.count-2 do begin Einlesen Datei i1 For i2 := i1+1 to DateiListe.count-1 do begin Einlesen Datei i2 Aufdopelte testen end; Ausgeben; end; |
Gruß Horst
Nachtrag:
neue getDoppelte Funktion
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110:
| function getDoppelte(List1, List2: TStringList; var Dolist: TStringList): Boolean; var i,j: Integer; begin;
getDoppelte:= false;
if List1.Count = 0 then exit;
if List2.Count = 0 then exit;
for i:= 0 to list1.Count-1 do list1.Objects[i] := Pointer(i); list1.Sort;
for i:= 0 to list2.Count-1 do list2.Objects[i] := Pointer(i); list2.Sort;
i :=list1.count-1; j:= list2.count-1; repeat while (i>=0) AND (list1[i]>list2[j]) do dec(i);
IF i< 0 then break;
iF list1[i]=list2[j] then begin Dolist.Add(Format('%.5d %.5d'+#13#10+'1: %s'+#13#10+'2: %s',[Dword(list1.Objects[i]),Dword(list2.Objects[j]),list1[i],list2[j]]));
dec(i); IF i < 0 then break; end;
while (j>=0) AND (list2[j]>list1[i]) do dec(j);
IF j< 0 then break;
If list1[i]=list2[j] then begin Dolist.Add(Format('%.5d %.5d'+#13#10+'1: %s'+#13#10+'2: %s',[Dword(list1.Objects[i]),Dword(list2.Objects[j]),list1[i],list2[j]])); dec(j); if j < 0 then break; end; until (i<=0) or (j<=0); dolist.sort; getDoppelte:= true; end;
procedure Tmainform.Button2Click(Sender: TObject); var l1, l2: TStringList; bl: TStringList; i, i2: Integer; begin l1:= TStringList.Create; l2:= TStringList.Create; bl:= TStringList.Create;
for i:= 0 to listbox1.Items.Count-1 do begin l1.LoadFromFile(listbox1.items.strings[i]); for i2:= i+1 to listbox1.items.count-1 do begin
memo1.Lines.Add(Format('Vergleiche:%3d %s mit %3d %s',[i,listbox1.Items[i],i2,listbox1.Items[i2]])); memo1.lines.add(''); l2.loadfromfile(listbox1.items.strings[i2]);
bl.Clear;
if getDoppelte(l1, l2, bl) then begin if bl.Count <> 0 then memo1.Lines.addstrings(bl) else memo1.Lines.add('Kein doppelten Einträge'); end;
memo1.lines.add('====================================================='); end; end; l1.Free; l2.Free; bl.Free; end; |
|
|
|