dynamisch Arrays erweitern ...

Anfängerfragen zum Programmieren mit PureBasic.
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

dynamisch Arrays erweitern ...

Beitrag von der-sigi »

Hallo heute Nacht

irgendwie bleib ich gerade überall stecken und finde nichts in den Beispielen oder im Board.

Ich sollte eine Datenbank abfragen und die Daten in ein Array schieben. Da ich nicht weiß, wieviel Datensätze in der Datenbanktabelle enthalten sind, bieten sich ja dynamische Arrays an. Darüber wird auch irgendwo informiert, die Beispiele beziehen sich aber immer auf statische Arrays oder ich habe gerade mal wieder Tomaten auf den Augen.

Ich habe das gerade wie folgt "gebastelt". Das funktioniert soweit, nur werden nicht alle zurückgegebenen Datensätze eingepflegt!?

Code: Alles auswählen

Structure DBDataType
  Name.s
  Aktiv.l
EndStructure

Dim DBData.DBDataType(0)

Counter = 1
...
  While NextDatabaseRow()
    DBData(Counter).Name = GetDatabaseString(0)
    DBData(Counter).Aktiv = GetDatabaseLong(6)
    Counter = Counter + 1
  Wend
...
Wie gesagt schiebt der bei 96 wirklichen Datensätzen in 38 die richtigen Daten rein, dann hört es auf. Dimensioniere ich mit 200, schiebt er alle 96 rein. Aber ich will und kann das nicht vorher festnageln.

Kann mir da bitte jemand auf die Beine helfen? Dankeschön.

Viele Grüße
Sigi
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 »

>> bieten sich ja dynamische Arrays an
Da PB direkt keine dynamischen Arrays unterstützt bieten sich eigentlich eine LinkList an :wink:
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
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du koenntest vorher auch mit einem "Count" Query die Anzahl der Zeilen
abfragen.
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

Hallo ihr Helfer

hallodri: Ist korrekt, bedeutet aber eine zusätzliche DB Abfrage, die Zeit kostet. Darauf wollte ich gerne verzichten.

ts-soft: Dann muß jemand mal das Wikipedia korrigieren, denn selbst da steht, daß PB dynamische Arrays kann. ;)

Ok, das mit den LinkListen geht, aber so was Umständliches habe ich noch nicht gesehen. Für alles doppelter Aufwand. Wenn man das im PB Source ein bißchen anpaßt, dann gibt es dynamische Arrays und man kann die zusätzlichen LinkLists wegwerfen. (Meine persönliche Meinung, nicht hauen).

Viele Grüße
und Danke für die Hilfe
Sigi
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> (Meine persönliche Meinung, nicht hauen).

nee, nee, da stimme ich mit Dir völlig überein! Ein Redim [Preserve] Array(),
so wie es in VB gang und gäbe ist, wäre (nicht nur für mich) eine sehr
sinnvolle Erweiterung der PB-Befehle.

Grüße ... Kiffi
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

ReDim ist in PB4.0 dabei.
In deinem ersten Post hast du einfach ohne Speicher zu reservieren
irgendwo in den Arbeitsspeicher geschrieben :shock:

Und LinkedLists sind genauso einfach :D (meine Meinung)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> ReDim ist in PB4.0 dabei.

argl! Alzheimer lässt grüssen. :oops:

Grüße ... Kiffi
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Was willste mit ReDim? Dafür gibt es doch dynamische Listen. Aber wahrscheinlich ist ReDim eine gekürzte LL.

Gruß Karl



Harte Typen brauchen keine Abwehrkräfte.
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

Hallo remi_meier
remi_meier hat geschrieben:ReDim ist in PB4.0 dabei.
Keine Ahnung was ReDim sein soll. Ein "Dim array()" für ein dynamisches Array würde mir reichen, wenn man schon "dimmen" muß. ;)

Und PB4.0 ist noch beta, also noch nicht zu gebrauchen (sondern nur zu testen, nicht daß mich jemand haut).
remi_meier hat geschrieben:In deinem ersten Post hast du einfach ohne Speicher zu reservieren irgendwo in den Arbeitsspeicher geschrieben :shock:
Mag sein, aber er hat die Daten die er abgelegt hat auch wieder gefunden. ;) Und für mich war es ein Test, was damit passiert.
remi_meier hat geschrieben:Und LinkedLists sind genauso einfach :D (meine Meinung)
Darfste natürlich haben.

Für mich ist

Code: Alles auswählen

  ; --- rein
  etwas(15) = "irgendwas"
  ; --- raus
  das = etwas(133)
wesentlich einfacher und vor allem übersichtlicher als

Code: Alles auswählen

  ; --- rein
  SelectElement(etwas(),15)
  AddElement(etwas())
  etwas() = "irgendwas"
  ; --- raus
  SelectElement(etwas(),133)
  das = etwas()
Wobei ich noch garnicht weiß ob das mit dem "SelectElement" und "AddElement" so geht, jedenfalls steht davon nichts in der Hilfe. Wenn nicht, dann muß man ja erst "FirstElement" plus 15 (fünfzehn) mal "NextElement" machen um dem was zuweisen zu können. Das ist dann garnicht mehr einfach und schon garnicht mehr übersichtlich. Aber selbst das hier ist umständlich.

Viele Grüße
Sigi
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

der-sigi hat geschrieben:... "dimmen" ...
... "dimensionieren" ...
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten