Anmelden

View Full Version : Datenstruktur mit Mehrfachvorkommen



JP
08-08-06, 19:16
Hallo Forum,

ich hätte eine Frage zu Datenstrukturen mit Mehrfachvorkommen.
Ich habe eine folgendermassen in RPGIV definiert:

D ArtSum ds dim(999)
D Artikel 10
D SumUms 20 3

Besteht die Möglichkeit diese Geschichte (die Anzahl der Elemente) dynamisch zu gestalten?

etwas zum Hintergrund am Beipiel dieser DS:
In dieser DS wird je Artikel eine Umsatzsumme abgelegt, wobei die Artikel unsortiert reinkommen. Jetzt kann es ja durchaus vorkommen, das nicht alle 999 Elemente gefüllt werden, sondern z.Bsp. nur 123.
Die DS wird am Ende mittels SORTA sortiert und weiterverarbeitet. Jetzt hab ich natürlich bedingt durch den SORTA, die leeren Elemente am Anfang. Aktuell suche ich per LOOKUP das erste gefüllte Element, um da mit der Weiterverarbeitung aufzusetzen. Und dies würde ich mir gern ersparen.

Besten Dank im Voraus

kuempi von stein
08-08-06, 20:40
Hello,

man kann in den E-Bestimmungen Stelle 45 für das Arry eine Sequenz (desc/asc) angeben.

Versuch doch mal ein "D" und ob der SORTA dann so greift, dass die Nullen hinten stehen...

Nur so ne Idee...

kuempi

JP
08-08-06, 21:00
Hallo,

die Sortierung macht er schon richtig.
Mir gehts eigentlich um die Anzahl der Elemente. Statt statisch 999 zu hinterlegen, z.Bsp. bei 1 beginnen und die Anzahl bei Bedarf zu erhöhen. So das ich am Ende nur 123 statt 999 Elemente habe. Das hätte dann den schönen Nebeneffekt, das ich mir den LOOKUP sparen könnte.

Und wenn ich mal mehr als 999 Elemente benötigen würde, hab ich momentan ein kleines Problem :eek:

trotzdem Danke

KM
09-08-06, 06:58
Hallo,

seit V5R3 hast Du doch die Möglichkeit den SORTA nur auf eine bestimmte Anzahl Elemente anzuwenden. Das sieht dann so aus:


C SORTA %SUBARR(TBL_PROP:1:Z)

Wobei Z die Anzahl der gefüllten Tabellenelemente ist. Dann wird nur bis zum Element Z sortiert und die leeren Elemente bleiben weiterhin am Ende der Tabelle.

Gruß,
KM

Fuerchau
09-08-06, 07:01
Dynamische Strukturen sind im RPG/LE leider nicht möglich.
Etwas eingeschränkt kann man es aber doch hinbekommen:

D BaseAdr * <= Pointer
D ArtSum ds dim(10000) based(BaseAdr)

Mittels %ALLOC/%REALLOC kann zur Laufzeit Speicher dem Pointer zugewiesen werden.
In den %LOOKUP-Funktionen kann die Anzahl der Elemente beschränkt werden.

Einzig der Sort funktioniert nicht.
Hier hilft ggf. das Einbinden der C-Funktion qsort().

Fuerchau
09-08-06, 07:04
Ab welchem Release gibts nun %subarr ???

B.Hauser
09-08-06, 08:35
Ab welchem Release gibts nun %subarr ???

Ab V5R3M0, wie oben bereits erwähnt.

Birgitta