PDA

View Full Version : %xfood und qualified



ILEMax
05-09-24, 09:24
Moin

habe eine DS



D_t_B_S DS qualified dim(45)
Datum 8s 0
Text 30
Betrag 9s 2
Sender 3


und möchte ein %xfoot(d_t_b_s.betrag) machen

anscheinend is die Syntax falsch.
oder geht das nicht auf qualified und ich muß das 'mit der Hand am Arm' machen?

Danke
Der ILEMax

Andreas_Prouza
05-09-24, 09:30
Was ist ein xfood?
Muss das DIM nicht DIM(45) sein?

ILEMax
05-09-24, 09:35
dim(45) stimmt

xfoot mit T, nicht mit D, (heute anscheinend nicht mein Tag ...)
(War im Pgm richtig, geht also immer noch nicht)

camouflage
05-09-24, 09:55
NEIN, funktioniert nicht. Du musst eine DO Schleife verwenden.

Antwort von ChatGPT (sorry)
"Ein qualifiziertes Datenstruktur-Array kann jedoch nicht direkt als Operand für <code>%XFOOT</code> verwendet werden, weil <code>%XFOOT</code> nur auf Arrays von numerischen Feldern angewendet werden kann."

Oder Du verschiebst das Betragsfeld in einen separaten Array und machst da den XFOOT.

Alles klar?

p.s.
...und wenn Du dich selbst kasteien möchtest, nimm einen Pointer. Deine Nachfolger werden es dir danken.

Pikachu
05-09-24, 10:02
Wird ein Fehler gemeldet?

ILEMax
05-09-24, 10:09
RNF7591 ein Operand eines Ausdrucks für den qualifizierten Namen ist ungültig
RNF0555 Parameter BETRAG für %XFOOT ist ungültig %XFOOT wid ignoriert

Pikachu
05-09-24, 10:20
Hier steht noch mehr...

WRKMSGD MSGID(RNF7591) MSGF(QDEVTOOLS/QRPGLEMSG)
WRKMSGD MSGID(RNF0555) MSGF(QDEVTOOLS/QRPGLEMSG)

ILEMax
05-09-24, 10:33
danke, aber nicht wirklich.
*err suche im Spool bringt das auch
und auf der Msg kann ich blätteren

Andreas_Prouza
05-09-24, 10:44
Ich fürchte du kannst diese Funktion nur direkt auf Felder die mit DIM deklariert wurden anwenden und nicht auf Sub-Felder einer DS mit DIM.

Fuerchau
05-09-24, 10:52
Das Problem ist, dass die Felder der DS kein Array sind, sondern nur die DS.
Um den Betrag zu einem Array zu machen, musst du die Overlay-Struktur anwenden:

dcl-ds MyDs qualified;
MyArray char(50) dim(100);
F1 char(1) overlay(MyArray:1);
F2 Char(5) overlay(MyArray:*next);
W1 packed(11:2) overlay(MyArray:*next);
end-ds;

Sum = %xfoot(MyDs.W1);

Durch das Overlay weiß der Compiler, dass die Felder dann wieder Arrays sind.
Was i.Ü. auch z.B. für %sort() funktioniert.