-
Datenstrukturen im free-format deklarieren
Hallo Zusammen,
ich habe alle Felder einer Datei (THFUWSTL02) als Datenstruktur definiert:
dcl-c #dssatz const('THFUWSTL02');
dcl-ds #tfwsatz1 extname(#dssatz)end-ds;
Nun möchte ich einzelne Felder der gleichen Datei als "Unterdatenstruktur" definieren, leider gelingt es mir nicht.
Wie muss ich es machen?
Danke für eure Hilfe
-
1. DS mit Qualified definieren, in 2. DS mit LIKEDS(1.DS) dann einbetten.
-
Oh Gott,
kannst du an meinem Beispiel es genauer beschreiben? Z.B. will ich feld1 und feld9 der Datei THFUWSTPU in die 2.Struktur bringen.
-
Ok, jetzt wird's klarer was du willst.
Feldnamen sind in RPG grundsätzlich eindeutig und können nicht mehrfach definiert werden.
Mittels "qualified" auf DS-Ebene wird aus "FELD" dann immer "DSNAME.FELD".
Um also den selben Namen mehrfach zu verwenden muss qualified verwendet werden.
(ich benutze immer noch die alte Syntax):
D MyDS DS qualified extname(MyFile)
D MyDS2 DS
D FELDX like(MyDs.FELDX)
D MyDS3 DS qualified
D FELDX like(MyDs.FELDX)
D MyDS4 DS qualified
D MyDS likeDS(MyDs)
Du hast nun das Feld FEDLX als Einzelfeld nur in der MyDS2.
In MyDS3 heißt das Feld nun "MyDS3.FELDX" und in MyDS4 nun "MyDS4.MyDS.FELDX".
Ich hoffe, ich konnte zu deiner Verwirrung beitragen.
-
Vielen Dank, aber ....
genau um die "neue Syntax" sprich free-Bestimmungen geht es mir.
dcl-ds #tfwsatz1 extname(#dssatz) qualified;
schachtel ich hier die 2.DS ein und wie?
end-ds
-
Mir ist immer noch nicht ganz klar was Du willst.
Vielleicht kannst Du die Datenstruktur, so wie Du Dir sie vorstellst mal im Fix-Format posten.
Hier ist ein Beispiel einer externen Datenstruktur, in der einzelne Felder umbenannt bzw. intialisiert wurden. Zunächst im klassischen und dann im Free-Format-
Code:
D ExtDSOrderHdr...
D E DS ExtName('ORDERHDRX')
D OrdCustNo E ExtFld(CustNo)
D Company E ExtFld('COMPANY') inz(10)
D DelDate E ExtFld(DelDate) inz(*SYS)
DCL-C ConstDelDate Const('DELDATE');
DCL-DS ExtDSOrderHdr EXTNAME('ORDERHDRX');
OrdCustNo ExtFld('CUSTNO');
Company ExtFld('COMPANY') inz(10);
DelDate ExtFLd(ConstDelDate) inz(*SYS);
End-DS;
Ansonsten kann man im Free-Format mit dem Schlüssel-Wort OVERLAY keine kompletten Datenstrukturen (sondern nur Unter-Felder) überlagern, sondern muss mit Hilfe des Schlüssel-Wortes POS die Start-Position angeben.
Birgitta
-
Ich denke, er will eine Datenstruktur befüllen, referenziert auf die Erste, die nur die zwei entsprechenden Felder enthält. So versteh ich es.
Also:
DCL-DS zweiteDS;
Field1 like(Feld1)
Field9 like(Feld9)
END-DS
Man könnte nun evtl. mit Pointern (Dieter bekommt gleich wieder graue Haare :-)) oder Referenzen ala Baldur arbeiten - aber warum so kompliziert (die Nachfolger werden es danken):
Datenstruktur definieren, zwei "EVALS" und gut ist.
Just my 2cts.
kf
-
Allerdings darf in solchen Fällen das neue Feld nicht wie das Referenz-Feld heißen.
Sofern die Referenz-Datenstruktur qualifiziert ist, sieht die Syntax so aus:
Code:
DCL-DS ZweiteDS Qualified;
Field1 Like(RefDS.Field1);
Field2 Like(RefDS.Field2);
End-DS;
Sofern die Subfields gleich heißten, benötigt man auch keine 2 (oder wieviel auch immer EVALS/MOVES), sondern EVAL-CORR überträgt alle gleichnamigen Unter-Felder.
Birgitta
-
Das ist ja häufig das Problem, dass ein Feldname in einer nicht-qualified-DS nur 1 Mal vorkommen darf. Ein implizit definiertes Feld (gibt's in Free ja nicht mehr) darf in keiner DS stehen.
Mit Qualified ist man auf der sicheren Seite (COBOL hat das schon immer) und bei EVAL-CORR werden gleiche Feldnamen übertragen.
-
Zitat von camouflage
Ich denke, er will eine Datenstruktur befüllen, referenziert auf die Erste, die nur die zwei entsprechenden Felder enthält. So versteh ich es.
Also:
DCL-DS zweiteDS;
Field1 like(Feld1)
Field9 like(Feld9)
END-DS
Man könnte nun evtl. mit Pointern (Dieter bekommt gleich wieder graue Haare :-)) oder Referenzen ala Baldur arbeiten - aber warum so kompliziert (die Nachfolger werden es danken):
Datenstruktur definieren, zwei "EVALS" und gut ist.
Just my 2cts.
ad 1) graue Haare sind in meinem Alter keine Schande
ad 2) Baldur wäre froh, wenn er noch ein paar graue Haare dazu bekäme
ad 3) Pointer helfen hier nicht weiter, da Datenstrukturen Speicherbeschreibung sind
ad 4) ich bewundere den feinsinnigen Humor der RPG Entwickler, was den Namen Datenstruktur angeht.
D*B
-
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: >>
1. Eine extern beschrieben Datei soll eingelesen und evtl geändert werden>>
2. Alle Felder dieser Datei als externe Datenstruktur #ds1 definieren>>
3. Eine zweite Datenstruktur #ds2 mit einem Teil der Felder definieren>>
Strukturen deshalb, weil ich einzelne eval-Befehle einsparen will.>>
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;
-
Vielleicht so:
read testr #ds1;
kf
Similar Threads
-
By kretzsch in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 14-08-14, 12:02
-
By it-dol in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 24-07-14, 13:05
-
By Günter in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 26-06-14, 14:10
-
By Tonazzo in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 12-06-14, 22:50
-
By froehlich in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 12-05-03, 15:35
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks