[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Nov 2007
    Beiträge
    371

    Numerisches Feld zu lang

    Hallo ich schon wieder .
    Ich soll ein altes RPG-Programm umstellen
    Problemstellung:

    IKundumsa KF 1 CK 2 CU
    I 3 4 0JAHR
    I p 12 76 UFG

    UFG is hier somitn 65 stellen lang. Also zu lang. Im alten RPG wurde diese Zeile hinzugefügt und der Compiler ist zufrieden:

    E UFG 13 9 0

    gelöst.

    Aber in RPGLE gibt es keine E-Zeilen zum definieren von interenen Tabellen und der der Compiler meckert weil das Feld UFG zu lang ist. Im alten RPG nicht. Warum??



    Klar ich könnte das Feld unterteilen aber gibt es ne andere Lösung?? Evtl uber DS oder was kann man tun ??


    UFG S 5P 0 Dim(13)
    geht nicht

    DUFG DS
    Du1 1 5P 0
    Du2 6 10P 0
    Du3 11 15P 0
    Du4 16 20P 0
    Du5 21 25P 0
    Du6 26 30P 0
    Du7 31 35P 0
    Du8 36 40P 0
    Du9 41 45P 0
    Du10 46 50P 0
    Du11 51 55P 0
    Du12 56 60P 0
    Du13 61 65P 0

    geht nicht


    DUFG DS
    Du1 1 9 0
    Du2 10 18 0
    Du3 19 27 0
    Du4 28 36 0
    Du5 37 45 0
    Du6 46 54 0
    Du7 55 63 0
    Du8 64 72 0
    Du9 73 81 0
    Du10 82 90 0
    Du11 91 99 0
    Du12 100 108 0
    Du13 111 117 0

    geht nicht

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Durch die E-Definition des UFG und die passende I-Definition weiß der Compiler, dass diese Definition den selben Speicher betrifft.

    Bei ILERPG wird dies durch DIM(nn) ersetzt.

    Zur ILE-Übersetzung ist da CVTRPGSRC ganz hilfreich, da nach der Übersetzung das Programm fehlerfrei compilierbar ist.
    Die E/I-Definitionen werden korrekt übersetzt.
    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
    Nov 2007
    Beiträge
    371
    Danke. Ich check es nicht.

    Ich defeniere gepackte Felder,

    muß aber ein Dezimales Dim geben.

    also in diesem Fall

    DUFG S 9 0 Dim(13)
    da steig ich noch nicht ganz durch.


    überträgt dann das Programm automatisch die Werte in die einzelnen Dim Felder und kann man dann ganz normal mir ihnen Rechnen??

    das ganze soll dann natürlich wieder als gepackte Zahl ausgegeben werden.



    z.B. in das B2-Feld
    .


    DSACHKONTDS DS
    DDSSACHKONT 1 24
    Dw 1
    DBAB 5
    DB2 16P 0
    DG 22P 0
    DEGNRDS 24



    muß man hier irgendwas beachten??

    danke nochmal

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    Versuch mal folgendes:

    PHP-Code:
    D DSUFG           DS                                            
    D   Du1                          5P 0                           
    D   Du2                          5P 0                           
    D
    *  usw.                                                        
    D   UFG                          5P 0 Dim(13Overlay(DSUFG
    Oder als UnterFeld(er) innerhalb einer Datenstruktur:
    PHP-Code:
    D MyDS            DS                                           
    D  Fld1                         10A  
     
    weitere Felder                          
    D    SubFUFG                                                   
    D      Du1                       5P 0  Overlay
    (SubFUFG)
    D      Du2                       5P 0  Overlay(SubFUFG: *Next)D*     usw.                                                    
    D      UFG                       5P 0 Dim(13Overlay(SubFUFG
    DWeitere Felder 
    Das Feld SubFUFG braucht nicht weiter definiert zu werden, da es allein durch die Überlagerung definiert ist!
    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
    Nov 2007
    Beiträge
    371
    Danke für den Lösungsvorschlag.

    Kann mir jemand nen Link oder ähnliches geben bezüglich meiner Frage wie das RPG intern mit gepackten Zahlen umgeht. Oder besser gesagt das Handling mit den Werten. Soll heissen wie kann man im Programm auf diese Werte zugreifen und weiterverarbeiten (Addieren usw.) und was zu beachten ist

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn ich diese Frage mal verstehen würde

    Mit gepackten Zahlen wird eben ganz einfach gerechnet, wie mit allen Zahlen eben.

    Der Zugriff auf DIM-Variablen erfolgt mittels einer Indexvariablen, der im RPG per "Feld,I" in ILE nun mit "Feld(I)" erfolgt.

    Daher ist der Zugriff nun einfacher, vor allem bei komplexeren Berechnungen.
    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

  7. #7
    Registriert seit
    Nov 2007
    Beiträge
    371
    das ist mir sogar bekannt

    ( Der Zugriff auf DIM-Variablen erfolgt mittels einer Indexvariablen, der im RPG per "Feld,I" in ILE nun mit "Feld(I)" erfolgt. )

    Ich probiers mal so zu erklären.

    Kann ich gepacktes Feld add Dezimalfeld = gepacktes oder dezimales Feld.

    oder

    gepacktes Feld add gepacktes Feld = gepacktes oder dezimales Feld usw.


    Dies würde mich interessieren wie sich hier RPG verhält und was man beachten sollte. Klar geht es auch über die Methode Jugend forscht aber ich würde halt schon gern wissen warum das so und so funktioniert.

    Ich hoffe ich konnte mich jetzt ein wenig deutlicher ausdrücken

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Hierzu kann das ILERPG-Programmierhandbuch wohl sachdienliche Hinweise geben.

    Für die Genauigkeit gelten die allgemeinen mathematischen Regeln bezgl. der Nachkommastellen.

    eval = (Wert1 + Wert2) * 12;

    Es gibt noch Ergänzungen:
    eval(h) <= kaufm. Runden
    eval(r) <= Zwischenergebnisse runden
    eval(hr) <= Kombination aus beiden

    Ob ein Feld gepackt, gezont oder Integer ist, entscheidet allein die Definition.
    Zwischenergebnisse werden ggf. angepasst.

    Bei Konstanten sollte man ggf. Nachkomma angeben, da sonst Ganzzahlen verwendet werden könnten:

    Ziel = Quelle * 10;
    Ziel = Quelle * 10,0;

    Für Zeichenvariablen kann man auch "rechnen":

    ZielChar = QuellChar + 'Text' + Feld2;

    In diesem Fall entspricht das dem alten CAT, nur wesentlich einfacher, vor allem bei BuiltIn's:

    Ziel = %trim(Feld) + %trimr(Feld2) + %triml(Feld3);
    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

  9. #9
    Registriert seit
    Nov 2007
    Beiträge
    371
    Hallo.
    Schade aber
    die Lösung von B.Hauser funktioniert so leider nicht. Evtl kapier ich es ja auch net.


    Folgendes Problem:
    FKUNDUMSA UF f 76 6AIDISK KEYLOC(5)

    IKundumsa KF 1 CK 2 CU
    I 3 4 0JAHR
    I p 12 76 UFG

    UFG IST SOMIT 65 P LANG


    Meine Datenstruktur:


    D* --- KUNDUMSA DATENSTRUKTUR ---
    DKUNDUMSADS DS
    DDSKUNDUMSA 1 76
    Djahr 3 4 0
    D SUBUFG
    D UFG1 5P 0 overlay(SUBUFG)
    D UFG2 5p 0 overlay(SUBUFG:*NEXT)
    D UFG3 5p 0 overlay(SUBUFG:*NEXT)
    D UFG4 5p 0 overlay(SUBUFG:*NEXT)
    D UFG5 5p 0 overlay(SUBUFG:*NEXT)
    D UFG6 5p 0 overlay(SUBUFG:*NEXT)
    D UFG7 5p 0 overlay(SUBUFG:*NEXT)
    D UFG8 5p 0 overlay(SUBUFG:*NEXT)
    D UFG9 5p 0 overlay(SUBUFG:*NEXT)
    D UFG10 5p 0 overlay(SUBUFG:*NEXT)
    D UFG11 5p 0 overlay(SUBUFG:*NEXT)
    D UFG12 5P 0 overlay(SUBUFG:*NEXT)
    D UFG13 5p 0 overlay(SUBUFG:*NEXT)
    D UFG 5p 0 DIM(13) overlay(SUBUFG)






    Ich will die Datenstruktur so aufbauen das ich folgenden Befehl absetzten kann:

    keykundumsa CHAIN KUNDUMSA KUNDUMSADS

    Also lesen in die Datenstruktur


    So wie ich die Datenstruktur definiert habe meckert der Compiler: die Länge der Datenstruktur ungleich der länge der SATZLÄNGE KUNDUMSA.

    DS-länge laut Compilerliste 115
    SUBUFG LÄNGE 39 ALPHA (sollte eigentlich auch 65 P werden)

    laut B.Hauser: Das Feld SubUFG braucht nicht weiter definiert zu werden, da es allein durch die Überlagerung definiert ist!-. STIMMT nicht so ganz oder ?



    wie müss ich die DS definieren das mein Vorhaben funktioniert???

    Danke für eure hilfe

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    es geht ja auch nicht um das Feld SUBUFG.
    Dieses Feld wird nur dazu benötigt um überlagert zu werden, bzw. damit sowohl die Felder UFG1 bis UFG13 druch die Feldgruppe UFG überlagert werden kann, bzw. diese Unterfelder als UFG(Index) angesprochen werden können.

    Ein numerisches Feld kann maximal 63P 0 definiert werden.
    Datenstrukturen bzw. überlagerte Felder (Ohne weitere Angaben werden immer als Alpha definiert) Deshalb gibt es ja auch des öfteren Probleme, wenn eine Datenstruktur mit numerischen Unterfeldern nicht initialisiert wurde.

    Was die Länge angeht, diese errechnet sich wie folgt:
    13 x 5P0 und für ein 5P0 Feld werden 3 Byte benötigt, ergibt also eine Gesamtlänge von 39 Byte.

    Das nächste Problem liegt darin, dass das Feld DSKUNDUMSA von Position 1-76 definiert wurde. Bei den gepackten Feldern und dem Subfeld SUBUFG wurde keine Start-Position angegeben, d.h. diese Felder beginnen ab der nächsten nicht belegten Position innerhalb der Datenstruktur. SUBUFG beginnt also ab Position 77. (Deshalb auch die Fehlermeldung, dass die Länge nicht übereinstimmt!) Wenn das Feld SUBUFG innerhalb der Datenstruktur an einer bestimmten Position beginnen soll, ist entweder die Startposition und End-Position erforderlich, oder die Angabe des Overlay-Schlüssel-Wortes.

    Ich weiß nicht, ob und in wiefern Du das Feld DSKUNDUMSA benötigst. Wenn es nur notwendig ist um die Länge der Datenstruktur zu definieren kannst Du darauf völlig verzichten und die Länge direkt in der Zeile mit der DS-Definition.

    PHP-Code:
    DKUNDUMSADS       DS            76                                       
    D DSKUNDUMSA                    76A   Overlay
    (KUNDUMSADS1)             
    D Jahr                           4P 0 Overlay(KUNDUMSADS3)             
    D SUBUFG                              Overlay(KUNDUMSADS5)             
    D   UFG1                         5P 0 overlay(SUBUFG)                    
    D   UFG2                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG3                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG4                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG5                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG6                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG7                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG8                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG9                         5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG10                        5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG11                        5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG12                        5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG13                        5p 0 overlay(SUBUFG:*NEXT)              
    D   UFG                          5p 0 DIM(13overlay(SUBUFG
    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

Similar Threads

  1. DSPF - numerisches Feld mit Vorzeichen links
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 11-02-08, 12:33
  2. Numerisches Feld rechtsstellen in DSPF
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 30-05-07, 11:47
  3. Alfa-Feld ----> Numerisches Feld
    By dino in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 30-11-06, 15:23
  4. ILE Feld in Feld ansprechen
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 10-05-06, 16:26
  5. Alpha-Feld in numerisches Feld
    By Mark_S in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 20-08-04, 11:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •