Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 28.09.07 11:19 
user profile iconwurzel 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Fr 28.09.07 11:22 
user profile iconjaenicke hat folgendes geschrieben:
user profile iconwurzel 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...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 if listbox1.items.strings[i] = listbox1.items.strings[i2] then
  continue
 else
 begin
  //Untersuchung
 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Win 2000, Win XP
BDS 2006 (Delphi, Delphi .NET, C++)
BeitragVerfasst: Fr 28.09.07 12:25 
Und wie's läuft :D

ausblenden volle Höhe Delphi-Quelltext
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
 //Listen erzeugen
 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//repeat
 until (i2 = listbox1.Items.Count);
 end;   //for i:= 0 to listbox1.Items.Count-1 do

 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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
ausblenden 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
ausblenden volle Höhe Delphi-Quelltext
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;

 //Datenprüfung
 if List1.Count = 0 then
  exit;

 if List2.Count = 0 then
  exit;

 //Original Zeilennummer in der Objects Eigenschaft merken
 //und anschliessend sortieren
 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;
 {
 Jetzt pendelnd suchen:
 Wiederhole
   Solange List1 Element größer runterwandern,
     Bei Gleichheit eintragen
  wechseln zur list2 und ebenso runterwandern
     Bei Gleichheit eintragen
 bis Eine Liste komplett abgeklappert ist
 }

 repeat
   while (i>=0AND (list1[i]>list2[j])  do
     dec(i);

   IF i< 0 then
     break;

   iF list1[i]=list2[j] then
     begin
     //Jetzt die original Zeilennummern eintragen
     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>=0AND (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<=0or (j<=0);
 dolist.sort;
 getDoppelte:= true;
end;


procedure Tmainform.Button2Click(Sender: TObject);
var l1, l2: TStringList;
    bl: TStringList;
    i, i2: Integer;
begin
 //Listen erzeugen
 l1:= TStringList.Create;
 l2:= TStringList.Create;
 bl:= TStringList.Create;

 // memo1.Lines.BeginUpdate;
 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;
 //memo1.Lines.EndUpdate;

 l1.Free;
 l2.Free;
 bl.Free;
end;