PDA

View Full Version : Variablenname in Variable



Seiten : [1] 2

Novus
14-07-20, 11:49
Hallo.


Ich habe in einem RPG Programm folgende Variablen definiert:

ABC
DEF
GHI

Nun habe ich im fogende eine Variable XXX. In dieser steht entweder ABC, DEF oder GHI.

Je nachdem was in XXX steht möchte ich nun der entsprechenden Variablen den Text "TEST" hinzufügen. Ich kann ja aber nicht einfach:

XXX = XXX + "TEST" schreiben da er dann ja den Wert "TEST" der Variablen XXX hinzufügt und nicht einer der anderen. Er soll also falls zB in XXX "ABC" steht folgendes machen:

ABC = ABC + "TEST"

Wie kann ich das machen, das ich den Inhalt der Variablen XXX als Variablenname einer anderen interpretiere?


Ich hoffe das war verständlich.

Danke schonmal und Gruß
Novus

camouflage
14-07-20, 12:29
Wie wär's mit select oder if Statements?

select;
when XXX = 'ABC';
ABC = ABC + 'TEST';
...
endsl;

Geht auch mit if. (if XXX = 'ABC'; ...)

holgerscherer
14-07-20, 13:34
Wie kann ich das machen, das ich den Inhalt der Variablen XXX als Variablenname einer anderen interpretiere?


Mit reinem RPG wird das fummelig bis fast unmöglich. Aber das ist doch eine gute Gelegenheit, SQL zu nehmen. Zum Beispiel mit PREPARE und co ;-)

RobertMack
14-07-20, 13:36
D VARTAB S 10A Dim(3)
D VARXXX S 10A
D V S 10I 0
/Free
VARTAB(1) = 'ABC';
VARTAB(2) = 'DEF';
VARTAB(3) = 'GHI';

VARXXX = 'ABC';
V = %Lookup(VARXXX:VARTAB);
If V > 0;
VARTAB(V) = %Trim(VARTAB(V)) + 'Test';
EndIf;
*InLr = *On;
/End-Free

Fuerchau
14-07-20, 15:37
@Robert
Da kannst du auch gleich
VARXXX + 'Test'
nehmen.
Es soll der Inhalt der Variablen ABC genommen werden.
So suchst du ja nur nach dem Text und verküpfst diesen dann.

Hier hilft nur ein Array mit 2 Feldern. Feld 1= Name des Elements, Feld 2 = Inhalt.
Das hat man schon früher mit den 2 Tabellen in der E-Definition gelöst.
Lookup in der 1. Tabelle, Ergebnis in der selben Position der 2. Tabelle.

holgerscherer
14-07-20, 18:54
Hier hilft nur ein Array mit 2 Feldern. Feld 1= Name des Elements, Feld 2 = Inhalt.
Das hat man schon früher mit den 2 Tabellen in der E-Definition gelöst.
Lookup in der 1. Tabelle, Ergebnis in der selben Position der 2. Tabelle.

Für solche Schweinereien lieb(t)e ich das gute alte Net.Data - da ging sowas wie

@DTW_ASSIGN(newvar, $(VAR$(BLUBBER$(PREF))))

Auch wenns der Lesbarkeit nicht dienlich ist...

Fuerchau
14-07-20, 22:33
Powershell, Rexx, Java/Script, Excel, VBA, .Net, u.v.m.
ILERPG: njet!

BenderD
15-07-20, 06:06
Powershell, Rexx, Java/Script, Excel, VBA, .Net, u.v.m.
ILERPG: njet!

... du hast dynamische Speicher Allokation, typisierte Arrays, was brauchst Du mehr?

D*B

PS: gute Programme kommen zuweilen ohne so etwas aus!!!

Fuerchau
15-07-20, 10:04
Dynamische Arrays, dynamische(re)s SQL, Assoziative Arrays und Feldlisten, ...
Oder einfach nur eine .Net-Portierung (Core) auf AS/400, ähm, IBM i.
Technisch wäre das möglich.
Man stelle sich nur vor: eine 128-Bit-Net-Entwicklung;-).

camouflage
15-07-20, 10:07
Dynamische Arrays kannst Du auch in RPG haben.