AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Suche Alternative zu Array

Ein Thema von Yheeky · begonnen am 15. Apr 2008 · letzter Beitrag vom 23. Apr 2008
Antwort Antwort
Seite 3 von 3     123
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#21

Re: Suche Alternative zu Array

  Alt 17. Apr 2008, 20:46
Hallo Christian,

aufregender Code. Schau dir aber mal deinen Index an:

for J := 0 to XML.DocumentElement.ChildNodes[I {XMLNode}].ChildNodes.Count - 1 do Gute Nacht
  Mit Zitat antworten Zitat
Yheeky

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

Re: Suche Alternative zu Array

  Alt 17. Apr 2008, 20:53
Zitat von marabu:
Hallo Christian,

aufregender Code. Schau dir aber mal deinen Index an:

for J := 0 to XML.DocumentElement.ChildNodes[I {XMLNode}].ChildNodes.Count - 1 do Gute Nacht
Ohje!!

Das soll natürlich so heissen:

Delphi-Quellcode:
function TForm1.LeseDaten(XMLString : String) : TList;
var I, J : integer;
    neuerDatensatz : PDaten;
    tempList : TList;
begin
  XML := newXMLDocument;
  XML.XML.Text := XMLString;
  XML.Active := True;

  // Datensatzlist erstellen
  tempList := TList.Create;

  // Werte zählen
  for I := 0 to XML.DocumentElement.ChildNodes.Count - 1 do
    begin
      for J := 0 to XML.DocumentElement.ChildNodes[I].ChildNodes.Count - 1 do
      begin
        // neuen Datensatz erstellen
        neuerDatensatz := new(PDaten);

        neuerDatensatz.ID := i;
        neuerDatensatz.Key := XML.DocumentElement.ChildNodes[I].ChildNodes[J].NodeName;
        neuerDatensatz.Value := XML.DocumentElement.ChildNodes[I].ChildNodes[J].NodeValue;

        tempList.Add(neuerDatensatz);

        // Lösche Datensatz
        Dispose(neuerDatensatz);
      end;

    end;

    result := tempList;

end;
PS: War das gute Nacht auf den Code bezogen?

Wenn nicht, dir auch ne gute Nacht!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#23

Re: Suche Alternative zu Array

  Alt 18. Apr 2008, 07:46
Moin Christian,

Zitat von Yheeky:
... War das gute Nacht auf den Code bezogen? ...
natürlich nicht - ich wollte mich lediglich Richtung Bett abmelden.

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. Das geht auch besser:

Delphi-Quellcode:
const
  RECORDNAME = 'computerdaten';

procedure ExtractValues(doc: IDOMDocument; recNo: Cardinal; s: TStrings);
var
  dlRecs: IDOMNodeList;
  dnRec: IDOMNode;
  dnFld: IDOMNodeEx;
begin
  with doc.documentElement as IDOMNodeSelect do
  begin
    dlRecs := selectNodes(RECORDNAME);
    dnRec := dlRecs.item[Pred(recNo)];
    s.Clear;
    dnFld := dnRec.firstChild as IDOMNodeEx;
    while Assigned(dnFld) do
    begin
      s.Values[dnFld.nodeName] := dnFld.Text;
      dnFld := dnFld.nextSibling as IDOMNodeEx;
    end;
  end;
end;
Freundliche Grüße
Angehängte Dateien
Dateityp: zip xml-12_122.zip (2,3 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf