AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

einen Datensatzmitgliedsnamen dynamisch zuweisen

Ein Thema von neumimnemecky · begonnen am 6. Jul 2022 · letzter Beitrag vom 7. Jul 2022
Antwort Antwort
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#1

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 6. Jul 2022, 19:40
Ich bin mit der jetzigen Lösung zufrieden.
Code:
if group = 'A' then
 case AnsiIndexText(pars[0], ['path', 'first_frame', 'end_frame' , 'first_filename' , 'check_if_files_exist']) oF
   0: ini.basic.A.path := pars[1];
   1: ini.basic.A.first := pars[1];
   2: ini.basic.A.last := pars[1];
   3: ini.basic.A.start_name := pars[1];
   4: ini.basic.A.check_files_exist := true;
 end
else
if group = 'B' then
 case AnsiIndexText(pars[0], ['path' , 'first_frame' , 'end_frame' , 'first_filename', 'check_if_files_exist']) oF
   0: ini.basic.B.path := pars[1];
   1: ini.basic.B.first := pars[1];
   2: ini.basic.B.last := pars[1];
   3: ini.basic.B.start_name := pars[1];
   4: ini.basic.B.check_files_exist := true;
 end;
Ich denke, es ist nur eine Schande, dass ich etwas nicht mit Stil verwenden kann
Code:
ini.basic[group].check_files_exist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.587 Beiträge
 
Delphi 12 Athens
 
#2

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 6. Jul 2022, 19:49
Ich denke, es ist nur eine Schande, dass ich etwas nicht mit Stil verwenden kann
Könnte man schon, wenn man will
Delphi-Quellcode:
record // oder class
  A: TIrgendwas;
  B: TIrgendwas;
  C: TIrgendwas;
  property basic[S: string]: TIrgendwas read ... write ...; // die Getter/Setter nicht vergessen
end;
Zum Auslesen kein Problem ... beim Zuweisen mit Records muß man "bissl" aufpassen/rumpfuschen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#3

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 6. Jul 2022, 20:11
Ich denke, es ist nur eine Schande, dass ich etwas nicht mit Stil verwenden kann
Könnte man schon, wenn man will
Delphi-Quellcode:
record // oder class
  A: TIrgendwas;
  B: TIrgendwas;
  C: TIrgendwas;
  property basic[S: string]: TIrgendwas read ... write ...; // die Getter/Setter nicht vergessen
end;
Zum Auslesen kein Problem ... beim Zuweisen mit Records muß man "bissl" aufpassen/rumpfuschen.
"property name declaration read ... write ..." Ich habe etwas Ähnliches in C/C++ gesehen, aber es ist eine sehr komplexe Sprache (programming language?) für mich. Hier muss ich Wissen hinzufügen. Wonach soll ich suchen? (englischer Begriff oder Name, lerne ich hauptsächlich von http://delphibasics.co.uk)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.587 Beiträge
 
Delphi 12 Athens
 
#4

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 6. Jul 2022, 20:15
https://docwiki.embarcadero.com/RADS...aften_(Delphi)
https://docwiki.embarcadero.com/RADS...rties_(Delphi)

in älteren Delphis ging eine Überladung nicht (mehrere Array-Property), aber wenn, dann gingen sie nur als Default-Property,
und in noch älteren Delphi ging es nur in Klassen aber noch nicht in Records.



Und die string-like Array-Operatoren gab es im Delphi 7 auch noch lange nicht.

Delphi-Quellcode:
var X, Y: array of Integer;

X := [4, 5, 6];
Y := [7]; // SetLength(Y, 1); Y[0] := 7;
X := X + Y;
X := X + [1, 2, 3];
Insert(9, X, 2);

// [4, 5, 9, 6, 7, 1, 2, 3]
https://docwiki.embarcadero.com/RADS...Types_(Delphi)
https://blog.marcocantu.com/blog/201...delphixe7.html
http://embarcadero.qcomgroup.com.tw/...whats-new.html
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Jul 2022 um 20:25 Uhr)
  Mit Zitat antworten Zitat
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#5

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 6. Jul 2022, 21:57
Ich bin im Abschnitt "Indexspezifizierer" (Index Specifiers) verloren. Warum verwenden sie im Folgenden keine Klammern []? "property Left: Longint index 0 read GetCoordinate "
https://docwiki.embarcadero.com/RADS...Redeclarations
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.587 Beiträge
 
Delphi 12 Athens
 
#6

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 6. Jul 2022, 23:28
Das ist was Anderes.

Über "diesen" Index kann man für mehrere Property den selben Getter/Setter verwenden.

Delphi-Quellcode:
property IrgendwasA: TSonstwas index 1 read GetItgendwas ...
property IrgendwasB: TSonstwas index 2 read GetItgendwas ...
property IrgendwasC: TSonstwas index 3 read GetItgendwas ...
Man kann den Index einfach einfach nur zur Verwendung der Erkennung welches Irgendwas# gemeint ist nutzen,
oder man kann diese 32 Bit auch verwende, u darin was zu Kodieren.

z.B. Property für den Zugriff auf einen/mehrere Bits (Bismaske) und darin codieren welche/wieviele Bits jeweils gemeint sind.
Oder man kann auch jeden anderen Ordinalen Typen dort angeben (z.B. Konstanten/Enums)

Delphi-Quellcode:
const cA = 1; // = Ord('A');
property IrgendwasA: TSonstwas index cA read GetItgendwas ...
property IrgendwasB: TSonstwas index cB read GetItgendwas ...

type TIrgendwasEnum = (iwA, iwB);
property IrgendwasA: TSonstwas index Ord(iwA) read GetItgendwas ...
property IrgendwasB: TSonstwas index Ord(iwB) read GetItgendwas ...
z.B. im Getter/Setter mit Index "rechnen",
das als Index für eine Array/Liste-Variable verwenden
oder für ein CASE index OF bzw. CASE TIrgendwasEnum(index) OF oder ...
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#7

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 7. Jul 2022, 07:20
Das ist was Anderes.
Ich habe keinen Hochschulabschluss. Ohne konkrete Anwendungsbeispiele aus der Praxis sind mir diese Dinge zu kompliziert. Im Allgemeinen ist es für mich also nur eine Theorie, und Theorien sind für mich ohne ein konkretes Beispiel schwer zu verstehen. Deswegen verstehe ich das nicht. Insgesamt ist mir der Artikel zu schwer.
  Mit Zitat antworten Zitat
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#8

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 7. Jul 2022, 09:08
Ich habe versucht, dem Beispiel in # 15 zu folgen. der Übersetzer nimmt keine Aufzeichnungen vor (Der Übersetzer nimmt den Code nicht; The compiler does not accept that). Ich probiere die Klasse aus. Fehler:

Code:
TBasicGroupSettings = record
  path: string;
  check_files_exist: boolean;
  start_name: string; // first_filename
  first: string; // first_filename
  last: string;  // end_frame
end;
// ini.basic has some general settings too
type TBasicSettings = class
  is_scroll_vertical: boolean;
  is_image_direction_up: boolean;
  is_search_colors_HSL: boolean;
  check_files_exist_A: boolean;
  check_files_exist_B: boolean;
  RAM_disk: string;
  RAM_free: LongWord; // v MB
  A: TBasicGroupSettings;
  B: TBasicGroupSettings;
  fps: byte;
  scroll_max_shift: integer;
  property basic[G:String] TBasicGroupSettings read Get_A write Set_A;
end;
[Error] constants_ini.pas(47): ':' expected but identifier 'TBasicGroupSettings' found

Code:
property basic[G:String] TBasicGroupSettings read Get_A write Set_A;

Geändert von neumimnemecky ( 7. Jul 2022 um 09:54 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.520 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: einen Datensatzmitgliedsnamen dynamisch zuweisen

  Alt 7. Jul 2022, 06:31
Ich bin mit der jetzigen Lösung zufrieden.
Code:
if group = 'A' then
 case AnsiIndexText(pars[0], ['path', 'first_frame', 'end_frame' , 'first_filename' , 'check_if_files_exist']) oF
   0: ini.basic.A.path := pars[1];
   1: ini.basic.A.first := pars[1];
   2: ini.basic.A.last := pars[1];
   3: ini.basic.A.start_name := pars[1];
   4: ini.basic.A.check_files_exist := true;
 end
else
if group = 'B' then
 case AnsiIndexText(pars[0], ['path' , 'first_frame' , 'end_frame' , 'first_filename', 'check_if_files_exist']) oF
   0: ini.basic.B.path := pars[1];
   1: ini.basic.B.first := pars[1];
   2: ini.basic.B.last := pars[1];
   3: ini.basic.B.start_name := pars[1];
   4: ini.basic.B.check_files_exist := true;
 end;
Da ist noch Luft nach oben.
a) Lokale Variablen mit schönen Namen verwenden und pars[0] bzw pars[1] zuweisen.
b) Prozedur machen für den doppelten Code und übergeben von ini.basic.A oder ini.basic.B. Dann spart man sich den doppelten Code. Dann der Aufruf:
Mach(group, 'A', pars[0], pars[1], ini.basic.A);
Mach(group, 'B', pars[0], pars[1], ini.basic.B);

Geändert von freimatz ( 7. Jul 2022 um 07:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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:59 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