Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Felder eines Objectes (https://www.delphipraxis.net/189457-felder-eines-objectes.html)

michael.cohrs 14. Jun 2016 13:11

Felder eines Objectes
 
Hallo und guten Tag,

ich habe folgendes Problem:

aus einer Objectlist hole ich mir ein enthaltenes Object.
Dieses enthält Variablen wie zb.

Val1
Val2
Val3
...
...
...

Nun möchte ich jedes dieser Variablen zur Laufzeit mit Werten füllen jedoch benötige ich nicht alle Variablen
sondern zb. nur

Val1
Val2

wie kann ich diese Variablen aus dem Object in einer Schleife abfragen, zb

for i := 0 to 10
obj.Val+IntToStr(i) := irgendwas

funktioniert leider nicht

Vielen Dank für eine Antwort

Michael

Aviator 14. Jun 2016 13:15

AW: Felder eines Objectes
 
Wie wäre es an dieser Stelle mit einem (dynamischen) Array? Dann kannst du auch mit einer (For-)Schleife durchlaufen.

himitsu 14. Jun 2016 13:22

AW: Felder eines Objectes
 
Oder per Generics auf Feld/Property
Delphi-Quellcode:
'Val' + IntToStr(i)
zugreifen.

Oder in den Objekten "manuell" einen Zugriff über Funktion mit Name oder über ein Array-Property einbauen. (zusätzlich)


Oder geht auch andersrum.
In den Objekten ein Array und die "Variablen" werden durch je ein Index-Property ersetzt, auf den selben Getter/Setter, wie für das Array-Property. :stupid:
Es ist eh "ungünstig" wenn direkt auf die Variablen Felder zugegriffen wird.

michael.cohrs 14. Jun 2016 13:28

AW: Felder eines Objectes
 
hallo himitsu,

uiha das kling schwierig, könntest Du mir ein codesnipsel senden?

michael.cohrs 14. Jun 2016 17:53

AW: Felder eines Objectes
 
Ich muss mich korrigieren,

nicht die Variablen des Objects sollen beschrieben werden sondern ich möchte den Inhalt lesen, es handelt sich um eine
VAL Menge von 50, diese möchte ich in einer Schleife auslesen...

Lemmy 14. Jun 2016 18:04

AW: Felder eines Objectes
 
entweder über die alte RTTI (unit TypeInfo) oder die neue RTTI http://docwiki.embarcadero.com/RADSt..._RTTI_arbeiten

KOmmt also erst mal drauf an welche Delphi-Version du hast, dann bastelt dir sicherlich jemand auch einen Beispielcode...

michael.cohrs 14. Jun 2016 19:14

AW: Felder eines Objectes
 
Danke für die Antwort,

ich arbeite tatsächlich noch mit Delphi 6.0 (Zwangsläufig weil in der Firma nichts anderes verfügbar ist)

himitsu 15. Jun 2016 13:19

AW: Felder eines Objectes
 
Natives ObjectPascal ohne RTTI:
Delphi-Quellcode:
type
  TTest = class
  private
    FTest: array[1..9] of Integer;
    function Getter(Index: Integer): Integer;
    procedure Setter(Index, Value: Integer);
  public
    property Test1: Integer index 1 read Getter write Setter;
    ...
    property Test9: Integer index 9 read Getter write Setter;
    property Test[Index: Integer]: Integer read Getter write Setter;
  end;

michael.cohrs 16. Jun 2016 13:25

AW: Felder eines Objectes
 
DANKE!!! so funktionierts!!

noch eine Frange: ich habe eine ObjectListe mit n Objekten die ich aus einer DB Lade.

das erste Feld des Objectes ist ein Wert vom Typ String der jedoch nummerisch ist.
wie kann ich diese Feld in der Objektliste sortieren?

Danke für weitere Antworten

Michael

Aviator 16. Jun 2016 13:29

AW: Felder eines Objectes
 
Zitat:

Zitat von michael.cohrs (Beitrag 1340328)
das erste Feld des Objectes ist ein Wert vom Typ String der jedoch nummerisch ist.
wie kann ich diese Feld in der Objektliste sortieren?

Also wenn du die Reihenfolge deiner Objekte in der ObjectList sortieren möchtest, dann kannst du beim Erzeugen der ObjectList ein Comparer mit übergeben. Dort drin kannst du dann sortieren wie du willst. Bspw. mit Delphi-Referenz durchsuchenCompareString.

michael.cohrs 16. Jun 2016 13:43

AW: Felder eines Objectes
 
Danke für die Antwort, ich habe so etwas leider noch nie gemacht, hast Du ein Beispiel für mich?

himitsu 16. Jun 2016 13:55

AW: Felder eines Objectes
 
Müsste man auch erstmal schauen, wie die TObjektList in Delphi 6 nochmal aussah und ob sie diese Funktion bereits besaß.
IComparer/TComparer und Co. wurden jedenfalls erst später eingeführt.

Wenn du einen String als Zahl vergleichen willst, dann muß du ihnvor dem Verleich auch in eine Zahl umwandeln,
oder dir selber eine Stringvergleichfunktion schreiben, welche Strings nach den Regeln der Zahlen vergleicht.

Einige "Listen" besitzen mindestens eine Delphi-Referenz durchsuchenTObjectList.Sort-Funktion, wovon oft eine Variante mit einer selbstgeschriebenen Vergleichsfunktion aufgerufen werden kann.
In dieser Funktion
Delphi-Quellcode:
procedure MeinVergleich(A, B: TObjekt): Integer{TValueRelationship}
, kannst du dann selber entscheiden was wie sortiert/verglichen werden soll.
Beispiel: Delphi-Referenz durchsuchenCompareStr, Delphi-Referenz durchsuchenCompareText oder Delphi-Referenz durchsuchenCompareValue

michael.cohrs 16. Jun 2016 13:59

AW: Felder eines Objectes
 
Nochmals Danke für die Antwort, das Umwandeln etc. ist kein Problem nur die Sortierung...da weiss ich echt nicht weiter und würde mich über ein praktisches Beispiel freuen.

Gruß
Michael

himitsu 16. Jun 2016 14:12

AW: Felder eines Objectes
 
Ich hatte meine Antwort zwischenzeitlich noch etwas erweitert.

himitsu 16. Jun 2016 14:15

AW: Felder eines Objectes
 
Es steht das zwar auch irgendwo in der OH, aber grob geht der Vergleich etwa so
(oder man klaut z.B. bei CompareValue:Integer)

Delphi-Quellcode:
if A.xxx < B.xxx then
  Result := -1
else if A.xxx > B.xxx then
  Result := +1
else {if A.xxx = B.xxx then}
  Result := 0;
Meherere Werte vergleichen dann der Reihe nach.
Delphi-Quellcode:
if A.xxx < B.xxx then
  Result := -1
else if A.xxx > B.xxx then
  Result := +1
else
  if A.zzz < B.zzz then
    Result := -1
  else if A.zzz > B.zzz then
    Result := +1
  else
    Result := 0;


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 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