Anzahl der Elemente in Struktur

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
univeda
Beiträge: 21
Registriert: 03.05.2009 18:17

Anzahl der Elemente in Struktur

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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))
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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...
(\/) (°,,,°) (\/)
Benutzeravatar
univeda
Beiträge: 21
Registriert: 03.05.2009 18:17

Beitrag 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?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
univeda
Beiträge: 21
Registriert: 03.05.2009 18:17

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
univeda
Beiträge: 21
Registriert: 03.05.2009 18:17

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten