AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zugriff auf Variablen / Klassenstruktur

Ein Thema von lance2403 · begonnen am 7. Apr 2016 · letzter Beitrag vom 7. Apr 2016
Antwort Antwort
lance2403

Registriert seit: 10. Mär 2009
Ort: Berlin
4 Beiträge
 
Delphi XE7 Professional
 
#1

Zugriff auf Variablen / Klassenstruktur

  Alt 7. Apr 2016, 10:29
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 property WerteArray [index: integer]: TValue; so kann ich auf die Werte per Index zugreifen.
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.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.178 Beiträge
 
Delphi XE4 Professional
 
#2

AW: Zugriff auf Variablen / Klassenstruktur

  Alt 7. Apr 2016, 10:55
Hallo,

schau mal hier:
http://docwiki.embarcadero.com/RADSt.../Eigenschaften

unter Indexbezeichner (ca. in der Mitte) Meinst du so was?

GRüße
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
637 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Zugriff auf Variablen / Klassenstruktur

  Alt 7. Apr 2016, 10:56
Kannst du zeigen in welcher art Struktur die Daten vorliegen?
Als Deinen internen Datentyp in der Klasse?
Fritz Westermann
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.015 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Zugriff auf Variablen / Klassenstruktur

  Alt 7. Apr 2016, 11:01
Um den Code lesbarer zu gestalten möchte ich die Werte aber auch gerne per Namen ansprechen.
Ich verstehe das Problem nicht ganz.

Du hast bisher gesuchterWert := meinGedöns.WerteArray[215]; In zwei Wochen weiß niemand mehr was denn die 215 bezeichnet.

Es reicht doch eigentlich völlig aus, sich einmal in einer .pas-Datei die Indizes lesbar aufzuschreiben:

Delphi-Quellcode:
unit werteArrayIndex;

interface

const
   indexTemperature   =   215;
   indexAirPressure   =   216;
implementation

end.
und in deinem Code fortan zu sagen

gesuchterWert := meinGedöns.WerteArray[indexTemperature];
Mir würde das locker reichen.


Klar kannst du auch mit String-Indizes arbeiten und sagen

gesuchterWert := meinGedöns.WerteArray['Temperatur']; Aber dadurch hat man doch im Endeffekt nichts gewonnen und es nur fehleranfälliger gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Zugriff auf Variablen / Klassenstruktur

  Alt 7. Apr 2016, 11:35
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;
Sebastian
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.376 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Zugriff auf Variablen / Klassenstruktur

  Alt 7. Apr 2016, 11:36
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;

Geändert von Bjoerk ( 7. Apr 2016 um 12:03 Uhr) Grund: // Edit
  Mit Zitat antworten Zitat
lance2403

Registriert seit: 10. Mär 2009
Ort: Berlin
4 Beiträge
 
Delphi XE7 Professional
 
#7

AW: Zugriff auf Variablen / Klassenstruktur

  Alt 7. Apr 2016, 12:26
Sry war grad beim Mittag.
Vielen Dank für die Tipps und Anregungen.

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