AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suche Alternative zu Array

Ein Thema von Yheeky · begonnen am 15. Apr 2008 · letzter Beitrag vom 23. Apr 2008
 
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#24

Re: Suche Alternative zu Array

  Alt 23. Apr 2008, 22:13
Zitat von marabu:
Du machst da einige nicht so schöne Sachen, aber richtig mies wird es, wenn du einen Zeiger auf einen dynamisch angeforderten Speicherplatz in deine Liste aufnimmst, den Speicher aber sofort wieder freigibst.
Mache ich das denn mit dem dynamischen Speicher?

Delphi-Quellcode:
type
  TDaten = class(TObject)
    ID : Cardinal;
    Key, Value : String;
  end;

  TDatenliste = class(TObjectList)
  protected
    function getItem(Index: Cardinal): TDaten; virtual;
    procedure setItem(Index: Cardinal; Objekt: TDaten); virtual;
  public
    function Add(Objekt: TDaten): Cardinal; virtual;
    function Remove(Objekt: TDaten): Cardinal; virtual;
    function IndexOf(Objekt: TDaten): Cardinal; virtual;
    procedure Insert(Index: Cardinal; Objekt: TDaten); virtual;
    property Items[index: Cardinal]: TDaten read getItem write setItem; default;
  end;

//...

function TDatenliste.getItem(Index: Cardinal): TDaten;
  begin
    Result := TDaten(inherited Items[Index]);
  end;

  procedure TDatenliste.setItem(Index: Cardinal; Objekt: TDaten);
  begin
    inherited Items[Index] := Objekt;
  end;

  function TDatenliste.Add(Objekt: TDaten): Cardinal;
  begin
    Result := inherited Add(Objekt);
  end;

  function TDatenliste.IndexOf(Objekt: TDaten): Cardinal;
  begin
    Result := inherited IndexOf(Objekt);
  end;

  procedure TDatenliste.Insert(Index: Cardinal; Objekt: TDaten);
  begin
    inherited Insert(Index, Objekt);
  end;

  function TDatenliste.Remove(Objekt: TDaten): Cardinal;
  begin
    Result := inherited Remove(Objekt);
  end;

//...

function TForm1.LeseDaten(Dateitext : String) : TDatenliste;
var newEntry : TDaten;
    tempDatenliste : TDatenliste;
    i, j : Cardinal;
begin
  XML := newXMLDocument;
  XML.XML.Text := Dateitext;
  XML.Active := True;

  tempDatenliste := TDatenliste.Create;

  for i := 0 to XML.DocumentElement.ChildNodes.Count - 1 do
    begin
    for j := 0 to XML.DocumentElement.ChildNodes[i].ChildNodes.Count - 1 do
      begin
        newEntry := TDaten.Create;

        newEntry.ID := i;
        newEntry.Key := XML.DocumentElement.ChildNodes[i].ChildNodes[j].NodeName;
        newEntry.Value := XML.DocumentElement.ChildNodes[i].ChildNodes[j].NodeValue;

        tempDatenliste.Add(newEntry);
      end;
    end;

  result := tempDatenliste;

end;
Was mit aufgefallen ist: wenn ich den Debugger laufen lasse und nach jedem Durchlauf der for-Schleife in tempDatenliste schaue, steht da irgendwie nichts drin. Es wird mit () angezeigt...was mich wundert ist, dass am Ende trotzdem die richtige Liste ausgegeben wird. Vielleicht hängt das ja noch mit einigen Schwachpunkten zusammen.

Wie kann ich denn den Code hier noch verbessern?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz