Hallo zusammen,

es ist eine bestehende Logik (altes RPG) in Free umsetzen.

Dabei ist folgende Situation gegeben:



In einer DDS gibt es 53 Felder die Werte (für jede Kalenderwoche) enthalten

Diese Felder sind natürlich alle in der DDS definiert

KW01

KW02



KW53



Alle Felder sind gleich definiert 11.2 über ein Referenzfeld

Also so in der DDS:

A KW01 R REFFLD(KW)

A KW02 R REFFLD(KW)

...





Es sind aber nicht die einzigen Felder in der Datei (sonst könnte man ja mit der Datenstruktur einfach arbeiten) Die Datei hat dutzende andere Felder (auch mehrere dieser 1-53 Felder)





Im Programm werden jetzt die Werte aufaddiert (oder auch andere Rechenoperationen damit gemacht.)

Um nicht immer alle Felder mit dem echten Namen anzusprechen gibt es ein Array



D KW S 11 2 DIM(53)



Dass kann ich natürlich in Free auch einfach abbilden

z. B. so:



DCL-S KW packed(11:2) DIM(53);



Jetzt kommt aber der Teil, wo die Originalfelder indexierbar werden.

Auch das geht im alten RPG mit einer einfachen I-Bestimmung

Das Externe Feld KW01 wird zum internen Feld KW mit dem Index 01

I-Bestimmung, dann Externer Feldnahme = KW01 und Feldname = KW(01) – fertig.

IDateiS1

I KW01 KW(01)

I KW02 KW(02)

I KW03 KW(03)







Jetzt kann man im Programm wunderbar sagen.

for §A = 1 to 53;

KW(§A) = ….…..

Endfor;



Wie bekomme ich es in free hin die Arrays zu definieren?

Ich habe es mit like ExtFld versucht

Das geht auch

dcl-ds DateiS1 qualified inz;

KW01 like ExtFld('KW01');

END-DS;



Nur halt dann auch wieder mit festen Namen KW01 und nicht das Array mit den 53 Werten.



Dann habe ich es auch so versucht

dcl-ds DateiS1 qualified inz;

KW:01 like ExtFld('KW01');

END-DS;



Ich kann KW nicht indexieren beim umbenennen des Externen Feldes aus der Datei weder mit

KW:01 like ExtFld('KW01');

KW,01 like ExtFld('KW01');

KW(01) like ExtFld('KW01');



Ich möchte auch ungerne ganz andere Lösungsansätze, da ich den logischen Teil (also die alte RPG-Source) schon in Free übernommen habe und die Programmlogik seit Jahren läuft und der Testaufwand für was Neues hoch wäre.

Somit wäre es schön und sinnvoll, wenn ich die Felder auch mit KW(01) oder KW(§A) oder wie auch immer die Zähler in den Schleifen heißen (gibt davon mehrere und es handelt sich um knapp 300 Felder und etliche Schleifen, wäre also echter Aufwand) ansprechen könnte.



Wer kann mir da auf die Sprünge helfen ?

Vielen Dank im Voraus
Peter