Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
Delphi 8 Architect
|
Re: Problem beim Vergleich von 1 Array mit sich selbst
28. Nov 2003, 00:51
Delphi-Quellcode:
type TNames = record
Name : String[50];
Hit : integer;
end;
PNames : ^TNames; //Typisierter Zeiger auf einen TNames-Record
var
HitListe : TList;
...
procedure CountDaHits;
var
i,
j,
ext : Integer;
AktZeile : String;
SchonDrinn : Boolean;
begin
ext := Memo1.Lines.Count-1;
Label3.Caption := IntToStr(ext);
if not Assigned(HitListe) // prüfen ob Hitliste schon instanziiert wurde,
then HitListe := TList.Create; // wenn nicht, dann erzeugen wir sie
for i := 0 to ext do
begin
AktZeile := copy(Memo1.Lines[i],Pos(']',Memo1.Lines[i])+2,MaxInt);
AktZeile := copy(AktZeile,1,Pos('read',AktZeile)-1);
SchonDrinn := False;
for j := 0 to HitListe.Count-1 do begin // wird bei der 1. Memo1-Zeile nicht ausgeführt
if PName(HitListe[i]).Name = AktZeile
then begin
SchonDrinn := True;
PName(HitListe[i]).Hit := PName(HitListe[i]).Hit+1;
end;
end; // for j
if not SchonDrinn then begin
HitListe.Add(new(PNames)); // von innen nach aussen:
// 1. erzeugt neuen TNames-Record (reserviert Speicher),
// 2. erzeugt Neuen PNames-Zeiger ( dto. )
// 3. weist dem PNames-Zeiger die Adresse des TNames-Record zu
// 4. Hängt den PNames-Zeiger als untypisierten Pointer an das
// Ende der HitListe an
PName(HitListe[i]).Name := AktZeile;
Hit := 1;
end; // if not SchonDrinn
end; // for i
end;
// Um kein Speicherleck zu bekommen, müssen wir die Hitliste vor
// ProgrammEnde noch leeren und freigeben:
procedure VorDemFeierabend;
var i : Integer;
begin
if Assigned(HitListe) // sollte die HitListe nicht Instanziiert worden sein, gäbe es
then begin // eine Zugriffsverletzung, deswegen immer schön prüfen, ob'se da ist
for HitListe.Count-1 downto 0 do begin
Dispose(PNames(HitListe[i])); // gibt den Record, auf den der i. PNames zeigt frei
HitListe.Delete(i); // Löscht den i.Zeiger und kürzt die Liste (deshalb
// zähle ich auch von Hinten nach vorne)
end;
end;
FreeAndNil(HitListe); // Zuguterletzt geben wir die HitListe frei - et voila
end;
Gruß
Tim Leuschner Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
|
|
Zitat
|