[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    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

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

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

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    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/

  7. #7
    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;




  8. #8
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Vielleicht so:

    read testr #ds1;
    kf

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

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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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.
    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

  11. #11
    Registriert seit
    May 2009
    Beiträge
    29
    Hallo Fuerchau,

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

    Allen vielen Dank!

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
  •