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

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Fr 05.09.03 13:40 
Moin Forum,
ich möchte zwei Listen miteinander vergleichen und nur die Einträge herausfiltern, die sich unterscheiden, aber irgendwie funzt es nicht richtig.

ausblenden Delphi-Quelltext
1:
ErgListe.assign(QuellListe,laAnd,ZielListe);					


Hat jemand einen Vorschlag ??

_________________
Wer Rechtschreibfehler findet, kann Sie behalten
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 05.09.03 14:56 
Von was für einen Type sind denn die Variablen ErgListe, QuellListe und Zielliste? Ich frage weil meine TList keine Assign Methode kennt.

Gruß
Tino
lambruco Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Fr 05.09.03 15:39 
Das wäre der genaue Typ, aber wieso hat dein TList kein assign ??

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type 
  Liste = class(TList)
    Name  : String;
    Size  : Integer;
  end;


Hier der Auszug aus der Hilfe

VCL-Referenz hat folgendes geschrieben:

TList.Assign

Die Methode Assign kopiert Elemente aus einer Liste in eine andere.

procedure Assign(ListA: TList; AOperator: TListAssignOp = laCopy; ListB: TList = nil);

Beschreibung

Mit Assign übernehmen Sie die Elemente einer Liste in eine andere. Assign kombiniert die Quell- und die Zielliste mit dem im Parameter AOperator angegebenen logischen Operator.

Wenn der Parameter ListBangegeben ist, ersetzt Assign zunächst alle Elemente in dieser Liste mit den Elementen aus der Liste ListA und kombiniert anschließend ListB und diese Liste anhand des im Parameter AOperator angegebenen Operators.

Wenn der Parameter ListB nicht specified ist, kombiniert AssignListA mit dieser Liste anhand des im Parameter AOperator angegebenen Operators.

_________________
Wer Rechtschreibfehler findet, kann Sie behalten
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 05.09.03 16:43 
Tlist.assign in dieser Form gibt es erst ab D6. (zumindestens kennts mein D5 std. auch nich ;) )

Zitat:

aber irgendwie funzt es nicht richtig.

damit weiß jeder sofort was anzufangen. :roll: Schreib doch erstmal, was genau nicht geht.( gibt es Fehlermeldungen etc.)

aus deinem Source werd ich auch nicht schlau. was soll name und size sein? doch nicht etwa die Elemente der Liste? -> dann hab Ich den Eindruck, du verwendest Tlist falsch. eine Tlist ist dazu da, diverse eigene Objekte zu speichern, wie es zum Beispiel unter Tlist.items gezeigt wird.

egal wie, wenn du eine Liste von Tlist ableitest und weitere Eigenschaften hinzufügst, werden die von assign sowieso nicht berücksichtigt, dann müßtest du dir auch noch eine eigen assign-methode erstellen, die die neuen Eigenschaften auch berücksichtigt.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
lambruco Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100

Win 2000/2000 Server/XP
D6 Prof.
BeitragVerfasst: Fr 05.09.03 21:23 
Also, ich kenne mich mit Listen nicht aus, aber vermutlich kannst du mich ein wenig aufklären:

1. Variante

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
type  
  Liste = class(TList) 
    Name  : String; 
    Size  : Integer; 
  end;
.
.
.
procedure test();
var
  Hauptliste : Liste;
  Teilliste    : Liste;
begin
  Teilliste := Liste.create;
  Hauptliste := Liste.create;
  Teilliste.Name :='egal';
  Teilliste.Size := 20;
  Hauptliste.add(Teilliste);
end;


2.Variante

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type
  PTest = ^test;
  test = record
  name : String;
  Zahl : Integer;
end;
.
.
.
procedure test2()
var
  liste : Tlist;
  Banane : PTest;
begin
  liste := Tlist.create;
  New(banane);
  banane^.name := 'egal';
  banane^.zahl := 111;
  liste.add(banane);
end;


Was ist denn jetzt besser. Ich finde die zweite Variante nerviger, da man die Pointer noch freigeben muss, aber in der Handhabe sehe ich keinen Unterschied.

_________________
Wer Rechtschreibfehler findet, kann Sie behalten
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 06.09.03 09:01 
lambruco hat folgendes geschrieben:

Was ist denn jetzt besser. Ich finde die zweite Variante nerviger, da man die Pointer noch freigeben muss, aber in der Handhabe sehe ich keinen Unterschied.

du mußt in der ersten Variante auch deine Elemtnente freigeben. wie immer in solchen Fällen: Suche in: Delphi-Forum, Delphi-Library MEMPROOF das zeigt dir, wo du vergißt, Speicher freizugebebn.
außerdem brauchst du in deiner ersten Variante kein Tlist als Grundobjekt, TObject langt doch auch. Deine Hinzugefügten Listen nutzt du doch gar nicht.
und ich versteh nicht wieso du keine Sichtbarkeitsfelder angibst (private, public). Großartig was erklären ist nicht meine Welt, ich würde dich hier auf die Seiten von delphi-source und delphi-treff verweisen, dort gibrt es tuts für die objektorientierte Programmierung. Solltest du dir durchlesen.

Wenn du bei Objekten bleibst, gugg dir mal die TObjectlist an, diese kann auf wunsch (ownsobjects bei create auf true stellen) die hinzugefügten objekte selbst verwalten, sprich beim löschen eines elements und Friegeben der ganzen liste werden die elemente auch freigegeben, ohne das du was tun mußt.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)