Anmelden

View Full Version : Datenstrukturen im free-format deklarieren



Seiten : 1 [2]

kretzsch
18-02-15, 10:31
Hallo, ich kann mich wieder mit diesem Thema beschäftigen und bin am verzweifeln, die gutgemeinten Hilfen halfen mir nicht (liegt an mir). Nochmal mein Anliegen, welches ich im full-free-Format programmieren will: <o:p></o:p>
1. Eine extern beschrieben Datei soll eingelesen und evtl geändert werden<o:p></o:p>
2. Alle Felder dieser Datei als externe Datenstruktur #ds1 definieren<o:p></o:p>
3. Eine zweite Datenstruktur #ds2 mit einem Teil der Felder definieren<o:p></o:p>
Strukturen deshalb, weil ich einzelne eval-Befehle einsparen will.<o:p></o:p>
Ich mache in den Deklarationen irgendetwas falsch, weil nach dem read-Befehl die Struktur #ds1 nicht gefüllt ist, und es dann zum Fehler kommt.
Dateibeschreibung
A R TESTR
A ARTNR 6S COLHDG('Artikelnr.')
A ARTBEZ1 30A COLHDG('Artikelbezeichnung')
A HERKL 20A COLHDG('Herkunftsland')
A WGR 3A COLHDG('Wgr')
A PLU 4S COLHDG('PLU ')
A K PLU


Programmcode
dcl-f testpu keyed usage(*input:*update);


dcl-c #dspu const('TESTPU');
dcl-ds #ds1 extname(#dspu) qualified inz end-ds;

dcl-ds #ds2 qualified;
artnr like(#ds1.artnr);
artbez1 like(#ds1.artbez1);
END-DS;


read testr;

dow not %eof(testpu);

if #ds1.plu > 2000;
eval-corr #ds2 = #ds1;
ENDIF;

read testr;

enddo;

camouflage
18-02-15, 10:46
Vielleicht so:

read testr #ds1;

B.Hauser
18-02-15, 10:50
Welche Fehlermeldung bekommst Du und Wann?
Beim Kompilieren oder zur Laufzeit?

Wenn Du Datenstrukturen qualifiziert definierst, musst Du auch die Datenstruktur beim Lesen und Updaten angeben, ansonsten sind die Daten NICHT in der externen Datenstruktur.

Birgitta

Fuerchau
18-02-15, 10:50
DCL-F definiert für eine Datei alle Felder ohne qualified!
Deshalb kann der Read nichts in deine DS1 füllen, da die Namen unterschiedlich sind.

ARTNR ist nicht gleich #DS1.ARTNR!

In der F-Bestimmung musst du den Namen mit dem Punkt als Prefix definieren.
Also Prefix('#DS1.'), damit die I-Bestimmungen zur Struktur passen.

kretzsch
18-02-15, 11:03
Hallo Fuerchau,

das war der entscheidende Hinweis Prefix('#DS1.')

Allen vielen Dank!