[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Apr 2003
    Beiträge
    195

    Question SORTA läuft nicht wie gewünscht

    Hallo allerseits,

    ich stehe momentan im wahrsten Sinne des Wortes auf dem Schlauch.

    ich will ein Array sortieren
    Code:
    d ds03                          49a   DIM(10) DESCEND        
    d  DS03ARTN                      8s 0 Overlay(ds03:*next)    
    d  DS03LINR                      8s 0 Overlay(ds03:*next)    
    d  DS03LANR                     25a   Overlay(ds03:*next)    
    d  DS03AEDT                      8s 0 Overlay(ds03:*next)
    und zwar mit folgendem Befehl:

    Code:
    SORTA %SUBARR(DS03 : 1 : numDS03) %FIELDS(ds03linr : ds03aedt);
    Das Feld numDS03 ist wie folgt definiert:
    Code:
    numDS03         s             10I 0
    Die Sortierung soll nach DS03LINR und absteigend nach DS03AEDT erfolgen.

    Aber, er zeigt mir schon bei der Codeingabe den folgenden Fehler:
    Ende des Ausdrucks erwartet.

    Was mache ich blos falsch????

    Danke für eure Rückmeldungen.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Seit wann soll SORTA eine %Fields() verstehen?
    %Fields() ist eine Feldnamenfunktion bei einem Update.

    Ansonsten musst du die Felder in der benötigten Reihenfolge in die DS stellen um dann die DS zu sortieren. Wobei da dann generell nach Alpha sortiert wird.
    Alternativ kannst du ein neues Feld mit Overlay definieren, dass die beiden Felder in der richtigen Folge zusammen fasst und dann darüber sortieren.
    Dies impliziert einen Sort der DS durchdas Overlay-Konstrukt.

    Und einen gemischten Sort gibts soweit nicht, da es ja SORTA(A/D) heißt.
    Dafür könntest du ein Zonedfeld zusätzlich nehmen und per "999999 - %days(Datum)" ein absteigendes Datum berechnen.
    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
    Apr 2003
    Beiträge
    195
    Das habe ich so in der Doku zu 7.3 gelesen:

    Code:
    D emp             DS                  QUALIFIED DIM(25)
    D   name                        25A   VARYING
    D   salary                       9P 2
    D numEmp          S             10I 0
    
    // Initialize the data structure
    emp(1).name = 'Maria';
    emp(1).salary = 1300;
    emp(2).name = 'Pablo';
    emp(2).salary = 1200;
    emp(3).name = 'Bill';
    emp(3).salary = 1100;
    emp(4).name = 'Alex';
    emp(4).salary = 1200;
    numEmp = 4;
    
    // Sort the EMP array using the SALARY and NAME subfields
    SORTA %SUBARR(emp : 1 : numEmp) %FIELDS(salary : name);
    // emp(1).name = 'Bill'
    // emp(1).salary = 1100       <-----
    // emp(2).name = 'Alex'       <-----
    // emp(2).salary = 1200       <-----
    // emp(3).name = 'Pablo'      <-----
    // emp(3).salary = 1200       <-----
    // emp(4).name = 'Maria'
    // emp(4).salary = 1300       <-----

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Mußt du ggf ein QUALIFIED verwenden?
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Apr 2003
    Beiträge
    195
    @Robi,

    danke, das hat schon mal geholfen, hatte ich glatt übersehen. Jetzt bringt er zumindest nicht diese Fehlermeldung dafür aber

    Code:
    Datenstrukturfeldgruppe muss als DS_ARRAY(*).KEY_SUBF  
    angegeben werden.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Hm, vielleicht lässt du mal das Overlay weg, denn das ist ja in der DS unnötig.
    Du bruchat nur ein Overlay, wenn du ein Feld innerhalb der DS redefinieren willst, was man allerdings besser mit einer geschachtelten DS machen sollte.
    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
    Aug 2001
    Beiträge
    2.873
    Lass mal das DESCEND weg.
    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

  8. #8
    Registriert seit
    Jan 2007
    Beiträge
    905
    Hast Du die Beispiele in der IBM Dok komplett durchgelesen?
    SORTA(D) %subarr(emp(*).salary : 1 : numEmp);

    würde einen descend Sort verursachen.
    Also, Birgitta's Rat, lass den DESCEND weg.
    kf

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    So, konnte es mal nachprobieren und auch anwenden:
    Nicht die DS muss DIM haben, sondern ein Feld in der DS:

    d ds03 DS
    d DS03Sort 49a DIM(10)
    d DS03ARTN 8s 0 Overlay(ds03Sort:1)
    d DS03LINR 8s 0 Overlay(ds03Sort:*next)
    d DS03LANR 25a Overlay(ds03Sort:*next)
    d DS03AEDT 8s 0 Overlay(ds03Sort:*next)

    SORTA(D) %subarr(DS03Sort : 1 : numEmp);
    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
    Apr 2003
    Beiträge
    195
    Seruvs,
    danke dass Du Dir die Mühe gemacht hast. Ich werde das so implementieren.

    LG
    Franz-Georg

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Nichts zu danken, ich brauchte das nun auch um eine Subfile umzusortieren.
    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

  12. #12
    Registriert seit
    Jan 2007
    Beiträge
    905
    Baldur, ich hätte da noch ein Aber.
    Franz-Georg möchte das Ganze ja nach LINR und AEDT sortieren. Mit deiner Lösung geht das so nicht, es sei denn, die Felder werden in der DS entsprechend angeordnet.

    Abgesehen davon, es geht überhaupt nicht mit %Fields, wenn nicht das entsprechende PTF für Rel. 7.3/4 geladen ist, da die %Fields Extension erst ab September 2021 implementiert wurde!

    Die einzige Lösung dafür ist, wenn ein Release vor 7.3 installiert ist, über zwei SortA Statements zu gehen oder eine Neuanordnung der Felder.
    kf

Similar Threads

  1. Rausfinden ob ein Job nicht läuft?
    By katdom in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 13-09-17, 07:58
  2. Server Firmware MH01653 per PTF läuft nicht.
    By Mida in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 25-02-17, 13:09
  3. UDF mit create Table läuft nicht in Batch
    By msost in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 08-09-16, 17:36
  4. CA und gui läuft nicht mehr nach 20 Minuten
    By tfroehlich in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 12-02-16, 13:51
  5. data propagator läuft nicht auf R5V1 falsche CCSID
    By rebe in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 04-04-02, 08:36

Berechtigungen

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