![]() |
mehrdimensionales array übergeben
Hallo DP,
mit folgender Prozedur möchte ich eine kleine XML Datei lesen und ein zwei dimensionales array befüllen, um es später in einer anderen Unit zu verwenden.
Delphi-Quellcode:
Ich wollte beide XML Knoten "displayMessages" und deren Unterbau in ein zweidimensionales array packen, aber der Compiler lässt mich kein mehrdimensionales array als Übergabeparameter der Prozedur erstellen:
Procedure GetMessage(xml,targetNode:string;message_array:array of array of string);
var xmldoc : IXMLDocument; root: IXMLNode; msg_node:IXMLNode; i: Integer; x:integer; s: string; begin //XMLDocument erzeugen und xml-Datei laden xmlDoc := newXMLDocument; xmlDoc.LoadFromXML(xml); xmlDoc.Active := true; root := XMLDoc.DocumentElement; for i := 0 to xmlDoc.ChildNodes[root.NodeName].ChildNodes.Count -1 do begin s := xmlDoc.DocumentElement.ChildNodes[i].NodeName; x := CompareStr(s, targetNode); if x = 0 then //targetnode Node gefunden begin message_array[i,1] := (xmlDoc.DocumentElement.ChildNodes[i].ChildNodes.FindNode('message').Text); message_array[i,2] := (xmlDoc.DocumentElement.ChildNodes[i].ChildNodes.FindNode('type').Text); message_array[i,3] := (xmlDoc.DocumentElement.ChildNodes[i].ChildNodes.FindNode('code').Text); message_array[i,4] := (xmlDoc.DocumentElement.ChildNodes[i].ChildNodes.FindNode('parameter').Text); message_array[i,5] := (xmlDoc.DocumentElement.ChildNodes[i].ChildNodes.FindNode('id').Text); end; end; end; Compilerfehler: Bezeichner erwartet, aber 'ARRAY' gefunden
Delphi-Quellcode:
Procedure GetMessage(xml,targetNode:string;message_array: array of array of string);
Code:
Oder wäre ein Array von Records besser geeignet ?
<?xml version="1.0" encoding="UTF-8"?>
<Model xmlns="http://www.test.de"> <displayMessages> <message>An error has occurred.</message> <type>UH</type> <code>99999</code> </displayMessages> <displayMessages> <message>Something is wrong</message> <type>UH</type> <code>999999</code> <parameter>HALLO_WELT</parameter> <id>30</id> </displayMessages> </Model> |
AW: mehrdimensionales array übergeben
Definier das
Delphi-Quellcode:
als eigenen Typen oder benutze die generische Syntax
array of array of string
Delphi-Quellcode:
, um "kompatible" Typen du haben.
TArray<TArray<string>>
Das
Delphi-Quellcode:
bei "Parametern" ist ein Sonderfall und stellt einen "offen" Array-Typen dar.
array of
Und da du Werte zuweisen willst, könnte ein
Delphi-Quellcode:
bestimmt nicht schaden. :zwinker:
var
Wenn du die Namen kennst und auch schön lesbar im Code benutzen willst, dann Record-Array oder Objekt-Array oder gar eine Objekt-Liste. :stupid: |
AW: mehrdimensionales array übergeben
a) Record bietet sich an
und b) eine List (of Record) nutzen. Eine "MessageList" würde sich hier mM nach anbieten, und ich bevorzuge out:
Delphi-Quellcode:
(ist aber wohl eher geschmackssache)
Procedure GetMessage(const xml,targetNode:string; out messageList: tMessagelist);
Gruß K-H |
AW: mehrdimensionales array übergeben
Zitat:
|
AW: mehrdimensionales array übergeben
U.U. ist eine TObjectlist die bessere Wahl, angeblich ist die Freigabe dabei einfacher, zu meiner Schande muß ich aber gestehen, daß bisher immer nur die TList genutzt habe.
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 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