![]() |
Zugriff auf Variablen / Klassenstruktur
Hallo,
gibt es eine Möglichkeit auf Variablen per Namen und per Index zuzugreifen? Zum Hintergrund: Ich möchte viele Werte aus einem Controller per RS232 auslesen. Das ganze funktioniert bereits nur leider nicht objektorientiert. Pro Wert sind Adresse, Typ, und Namen vorgegeben. Entsprechend dem Typ (unsigned 16Bit, string[16], signed 32Bit) ergibt sich eine Anzahl von Bytes die ich von der Adresse beginnend lese. Benutze ich ein
Delphi-Quellcode:
so kann ich auf die Werte per Index zugreifen.
property WerteArray [index: integer]: TValue;
Um den Code lesbarer zu gestalten möchte ich die Werte aber auch gerne per Namen ansprechen. Dazu müsste ich dann jedem einzelnen Wert ein property spendieren. Ich suche nun die Kombination aus beiden da ich sich um rund 250 Werte handelt und der Zugriff per Index weniger Schreibaufwand bedeutet. |
AW: Zugriff auf Variablen / Klassenstruktur
Hallo,
schau mal hier: ![]() unter Indexbezeichner (ca. in der Mitte) Meinst du so was? GRüße |
AW: Zugriff auf Variablen / Klassenstruktur
Kannst du zeigen in welcher art Struktur die Daten vorliegen?
Als Deinen internen Datentyp in der Klasse? |
AW: Zugriff auf Variablen / Klassenstruktur
Zitat:
Du hast bisher
Delphi-Quellcode:
In zwei Wochen weiß niemand mehr was denn die 215 bezeichnet.
gesuchterWert := meinGedöns.WerteArray[215];
Es reicht doch eigentlich völlig aus, sich einmal in einer .pas-Datei die Indizes lesbar aufzuschreiben:
Delphi-Quellcode:
und in deinem Code fortan zu sagen
unit werteArrayIndex;
interface const indexTemperature = 215; indexAirPressure = 216; implementation end.
Delphi-Quellcode:
gesuchterWert := meinGedöns.WerteArray[indexTemperature];
Mir würde das locker reichen. Klar kannst du auch mit String-Indizes arbeiten und sagen
Delphi-Quellcode:
Aber dadurch hat man doch im Endeffekt nichts gewonnen und es nur fehleranfälliger gemacht.
gesuchterWert := meinGedöns.WerteArray['Temperatur'];
|
AW: Zugriff auf Variablen / Klassenstruktur
Meinst du sowas:
Delphi-Quellcode:
type
TMyClass = class protected function GetWerteArray(const IndexOrName: OleVariant): TValue; public function FindValue(const AName: string): TValue; property WerteArray[const IndexOrName: OleVariant]: TValue read GetWerteArray; end; // ... function TMyClass.GetWerteArray(const IndexOrName: OleVariant): TValue; begin Result := nil; if not VarIsNull(IndexOrName) then begin if VarIsNumeric(IndexOrName) then Result := FList[IndexOrName] else Result := FindControl(IndexOrName); end; end; function TMyClass.FindValue(const AName: string): TValue; var LIndex: Integer; begin Result := nil; for LIndex := 0 to FList.Count - 1 do begin // ... TODO end; end; |
AW: Zugriff auf Variablen / Klassenstruktur
Suche den Eintrag ggf. besser mit IndexOf. Du kannst auch eine Property vom Typ string indizieren die das macht.
Delphi-Quellcode:
property ItemsByName[Name: string]: TValue read GetItemsByName;
.. function TValues.GetItemsByName(Name: string): TValue; var Index: integer; begin Index := IndexOfName(Name); if Index > -1 then Result := FItems[Index] else Result.Clear; // falls TValue eine Klasse ist: Result := nil; end; |
AW: Zugriff auf Variablen / Klassenstruktur
Sry war grad beim Mittag.
Vielen Dank für die Tipps und Anregungen.:-D @Günther: Das scheint vorerst die einfachste Lösung für mein Problem zu sein. Die Varianten von geskill und Bjoerk dürften ebenfalls funktionieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 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