![]() |
Re: Suche Alternative zu Array
Hallo Christian,
aufregender Code. Schau dir aber mal deinen Index an:
Delphi-Quellcode:
Gute Nacht
for J := 0 to XML.DocumentElement.ChildNodes[I {XMLNode}].ChildNodes.Count - 1 do
|
Re: Suche Alternative zu Array
Zitat:
Das soll natürlich so heissen:
Delphi-Quellcode:
PS: War das gute Nacht auf den Code bezogen? ;-)
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; Wenn nicht, dir auch ne gute Nacht! :-D |
Re: Suche Alternative zu Array
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Christian,
Zitat:
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:
Freundliche Grüße
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; |
Re: Suche Alternative zu Array
Zitat:
Delphi-Quellcode:
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.
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; Wie kann ich denn den Code hier noch verbessern? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 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