AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Gehen strings als Eigenschaftsnamen? Wenn ja wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Gehen strings als Eigenschaftsnamen? Wenn ja wie?

Ein Thema von ScharfeMietze · begonnen am 7. Okt 2018 · letzter Beitrag vom 8. Okt 2018
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#7

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 14:09
Prinzipell hast Du das richtig verstanden, Du musst quasi "nur" die Case-Abfrage im Beispiel an Deine Bedürfnisse anpassen.

SetStringsProperty befüllt eine Eigenschaft vom Typ TStrings.

Schau Dir bitte die Unit TypInfo (bzw. das Gegenstück Deiner Delphiversion) an.

Bei allen Methoden zum Lesen / Schreiben gilt eigentlich folgender Aufbau:

Welches Objekt, welche Eigenschaft, welcher Wert Siehe u. a.: http://docwiki.embarcadero.com/Libra...System.TypInfo

Für die unterschiedlichen Eigenschaften gibt es jeweils entsprechende Getter und Setter. Die musst Du "nur" entsprechend Deiner Datentypen aufrufen.

Jetzt rate ich mal, da mir das Ganze irgendwie zu abstrakt ist und ich nicht über eine passende Delphiversion verfüge (sinngmäß sowas):
Delphi-Quellcode:
if (Ljtr.TokenType = TJsonToken.String) then begin
  if (LowerCase(Ljtr.Path) = 'irgendwas_was_ein_String_Ist') then begin
    SetStrProp(LBotOptions,'ZuSetzendeStringEigenschaft',Ljtr.Value.ToString);
  end else
  if (LowerCase(Ljtr.Path) = 'anderer_String') then begin
    SetStrProp(LBotOptions,'AndereStringEigenschaft',Ljtr.Value.ToString);
  end;
end else
if (Ljtr.TokenType = TJsonToken.Integer) then begin
  if (LowerCase(Ljtr.Path) = 'irgendwas_was_ein_Integer_Ist') then begin
    SetInt64Prop(LBotOptions,'ZuSetzendeIntegerEigenschaft',Ljtr.Value.ToInteger);
  end else
  if (LowerCase(Ljtr.Path) = 'anderer_String') then begin
    SetInt64Prop(LBotOptions,'AndereIntegerEigenschaft',Ljtr.Value.ToInteger);
  end;
end else
// alle weiteren Typen abarbeiten und die jeweilige SetGewünschterTypProp nutzen.
Oder, damit es kürzer und (eventuell) lesbarer wird:
Delphi-Quellcode:
var
  sLowerPath : String;
  sEigenschaft : String;
begin
  sLowerPath : LowerCase(Ljtr.Path);
  if (Ljtr.TokenType = TJsonToken.String) then begin
    if (sLowerPath = 'irgendwas_was_ein_String_Ist') then sEigenschaft := 'ZuSetzendeStringEigenschaft'
    else if (sLowerPath = 'anderer_String') then sEigenschaft'AndereStringEigenschaft';
    SetStrProp(LBotOptions,sEigenschaft,Ljtr.Value.ToString);
  end else
  if (Ljtr.TokenType = TJsonToken.Integer) then begin
    if (sLowerPath = 'irgendwas_was_ein_Integer_Ist') then sEigenschaft := 'ZuSetzendeIntegerEigenschaft'
    else if (sLowerPath = 'anderer_Integer') then sEigenschaft := 'AndereIntegerEigenschaft';
    SetInt64Prop(LBotOptions,sEigenschaft,Ljtr.Value.ToInteger);
  end else
  // alle weiteren Typen abarbeiten und die jeweilige SetGewünschterTypProp nutzen.
end;
oder eventuell:
Delphi-Quellcode:
var
  sLowerPath : String;
  sEigenschaft : String;
begin
  sLowerPath : LowerCase(Ljtr.Path);
  if (sLowerPath = 'irgendwas_was') then sEigenschaft := 'WirdZuEigenschaft'
  else if (sLowerPath = 'was_anderes') then sEigenschaft := 'AndereEigenschaft'
  else if ...;
  case Ljtr.TokenType of
    TJsonToken.String : SetStrProp(LBotOptions,sEigenschaft,Ljtr.Value.ToString);
    TJsonToken.Integer : SetInt64Prop(LBotOptions,sEigenschaft,Ljtr.Value.ToInteger);
    // alle weiteren Typen abarbeiten und die jeweilige SetGewünschterTypProp nutzen.
  else
    // Fehlermeldung, weil ein Typ vergessen wurde?
  end;
end;

Geändert von Delphi.Narium ( 7. Okt 2018 um 14:10 Uhr) Grund: Copy&Paste-Fehler behoben
  Mit Zitat antworten Zitat
 


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 10:54 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 by Thomas Breitkreuz