Seite 1 von 2

Anzahl der Elemente in Struktur

Verfasst: 25.05.2009 20:42
von univeda
Ich hab dazu in der Hilfe und in den Foren nicht finden können.

Code: Alles auswählen

Structure PERSONEN
id.l
vorname.s
nachname.s
alter.l
geschlecht.s
EndStructure
In diesem Fall gibt es also 5 Elemente in der Struktur. Wie kann ich die Anzahl der Elemente einer Struktur ermitteln?

Verfasst: 25.05.2009 20:48
von ts-soft
Indem Du Dir die Strukture anschaust :mrgreen:
Ansonsten kannste nur die Größe feststellen, die aber keinerlei
Rückschlüsse zuläßt. (SizeOf(Personen))

Verfasst: 25.05.2009 21:00
von KeyKon
Die Frage is eher was das bringen sollte, wo man die Struktur doch eh nur über Pointer bzw. Direkt die Namen ansprechen kann...

Verfasst: 25.05.2009 21:00
von univeda
SizeOf bringt mir ja wie du festgestellt hast nichts. Und anschauen möchte ich die Struktur im Programmablauf... Ich weiß natürlich wieviele Elemente die Struktur hat, möchte aber bei Änderungen an der Struktur nicht immer den gesamten Code ändern in dem ich Bezug auf die Anzahl der Elemente in der Struktur nehme.

Es gibt also keine Möglichkeit die Anzahl der Elemente programmtechnisch zu ermitteln?

Verfasst: 25.05.2009 21:03
von Kaeru Gaman
die Struktur ist zur Laufzeit nicht wirklich präsent.
alle element-zugriffe werden vom compiler in Offsets übersetzt.

> möchte aber bei Änderungen an der Struktur nicht immer den gesamten Code ändern in dem ich Bezug auf die Anzahl der Elemente in der Struktur nehme.

dann erstelle dir eine Konstante unmittelbar neben der Struktur, die kannst du im gleichen Atemzug mit ändern.

Code: Alles auswählen

Structure PERSONEN
  id.l
  vorname.s
  nachname.s
  alter.l
  geschlecht.s
EndStructure
#AnzElem_PERSONEN = 5
... allerdings erschließt sich mir jetzt auch nicht, wozu das nötig/sinnvoll sein sollte.

Verfasst: 25.05.2009 21:13
von univeda
Kaeru Gaman hat geschrieben:... allerdings erschließt sich mir jetzt auch nicht, wozu das nötig/sinnvoll sein sollte.
Ich verwende z.B. Strukturen zur Abbildung von Datenbanktabellen. Diese Tabellen frage ich im Programmverlauf an vielen Stellen z.B. über Schleifen ab. Heute steht dort je nach Tabelle (und damit auch je nach Struktur) z.B. folgendes:

Code: Alles auswählen

if tabelle.s = "tabelle1"
for i = 1 to 7 (<- Anzahl der Spalten in der DB-Tabelle = Anzahl der Elemente in der Struktur)
do something...

elseif tabelle.s = "tabelle2"
for i = 1 to 13 (<- wieder eine andere Anzahl und evtl. der einzige Unterschied zur ersten Schleife)
do something

noch mehr tabellen...

endif

Ich hoffe der Grund meiner Anfrage ist nun klarer.

Verfasst: 25.05.2009 21:14
von ts-soft
Dafür schreibt man meist als erstes element die größe der Strukture in die
Strukture, macht mind. jede 2te Api-Strukture so.
Anhand des ersten members kann man dann feststellen wieviel platz in der
strukture ist und entsprechend reagieren.

Verfasst: 25.05.2009 21:21
von univeda
ts-soft hat geschrieben:Dafür schreibt man meist als erstes element die größe der Strukture in die
Strukture, macht mind. jede 2te Api-Strukture so.
Anhand des ersten members kann man dann feststellen wieviel platz in der
strukture ist und entsprechend reagieren.
Das hört sich nach einer Lösung an, nur wie stelle ich das an? Wie weise ich in der Struktur einem Element direkt einen Wert zu?

Verfasst: 25.05.2009 21:31
von ts-soft
Ne, ich denke eher es ist keine Lösung:

Code: Alles auswählen

Structure PERSONEN
  size.i
  id.l
  vorname.s
  nachname.s
  alter.l
  geschlecht.s
EndStructure

Define.PERSONEN men
men\size = SizeOf(PERSONEN)
Wenn Du jetzt die Strukture, bzw. eher den Memory, mehr ist es ja nicht,
an eine andere Anwendung übergibst, kann diese feststellen wieviel Platz
dort ist, damit es den Speicher nicht überschreibt.

Verfasst: 25.05.2009 21:34
von Kaeru Gaman
da Strukturen nicht dynamisch sein können, rate ich noch mal zur Konstanten.


oder gleich eine echte datenbank benutzen, eine LList ist nur eine halbechte Datenbanktabelle.