[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2009
    Beiträge
    29

    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


  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    1. DS mit Qualified definieren, in 2. DS mit LIKEDS(1.DS) dann einbetten.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    May 2009
    Beiträge
    29
    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.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    May 2009
    Beiträge
    29
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Jan 2007
    Beiträge
    905
    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

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von camouflage Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    May 2009
    Beiträge
    29
    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;




  12. #12
    Registriert seit
    Jan 2007
    Beiträge
    905
    Vielleicht so:

    read testr #ds1;
    kf

Similar Threads

  1. Feldgruppen im free-Format
    By kretzsch in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 14-08-14, 12:02
  2. Vergleichen Feldinhalte von qualifizierten Datenstrukturen
    By it-dol in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 24-07-14, 13:05
  3. XML-Ausgabe in Cobol im Format UTF-8
    By Günter in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 26-06-14, 14:10
  4. S/36 Format und Hidden Felder
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 12-06-14, 22:50
  5. Daten von i-series in xml-Format
    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
  •