[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Thema: sorta

Hybrid View

  1. #1
    Registriert seit
    Nov 2011
    Beiträge
    91

    sorta

    Hallo zusammen!

    Ich habe eine kurze Frage zu einem sorta im free-Format.


    Ich habe ein Array, das so aufgebaut ist:

    D Array DS dim(10)
    D qualified
    D Feld1
    D Feld2


    Wie kann ich jetzt nach z.B. Feld2 sortieren lassen?

    Schon jetzt: Danke!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    So unterstützt der SORTA das leider nicht:

    D MyDs DS
    D MyArray 20 dim(10)
    D Feld1 10 overlay(myArray:1)
    D Feld2 10 overlay(MyArray:*next)

    SORTA Feld1
    SORTA Feld2
    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
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    So unterstützt der SORTA das leider nicht:
    Stimmt nicht!
    Ab Release 7.1 können Array-Datenstrukturen SO sortiert werden:

    Code:
     /Free
        SortA Array(*).Feld2;
     /End-Free
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Sehr schön, aber was nützt mir das jetzt auf V5 oder V6 ?
    Vor Ende 2012 habe ich da wohl keine Chance .
    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
    Nov 2011
    Beiträge
    91
    Danke! Das ist schonmal der erste Schritt.

    Aber wie kann ich dieses Array dann füllen? In dem Array mit DS konnte ich ja sagen Feld1 = Feld1; Feld2 = Feld2.

    Jetzt müsste ich die Felder ja als zusammenhängendes "Element" in das Array schreiben. Wie mache ich das bei unterschiedlichen Datentypen?

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von philsturm Beitrag anzeigen
    Jetzt müsste ich die Felder ja als zusammenhängendes "Element" in das Array schreiben. Wie mache ich das bei unterschiedlichen Datentypen?
    Musst Du nicht! Da Feld1 und Feld2 ebenfalls Feldgruppen sind:

    Code:
     
    D MyDS            DS                      Qualified
    D   MyArray                             Dim(10)
    D     Feld1                      10A    Overlay(MyArray)
    D     Feld2                      10I 0  Overlay(MyArray: *Next)
    /Free
        MyDS.Feld1(1) = 'XYZ';
        MyDS.Feld1(2) = 'AAA';
       
        MyDS.Feld2(1) = 'XXX';
        MyDS.Feld2(2) = %Int(MyDS.Feld1(7));
     /End-Free
    Übrigens MyArray ist allein durch die Überlagerung definiert, d.h. es ist keine weitere Definition (wie Längenangabe oder Datentyp) notwendig

    @Baldur
    Glaubst Du, Du bist das einzige arme Schweinchen?
    Ich muss noch alles auf V5R2 runterwandeln ... und bevor der letzte unserer Kunden nicht von V5R2 weg ist, passiert da auch nichts weiter.

    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

  7. #7
    Registriert seit
    Apr 2012
    Beiträge
    360
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Musst Du nicht! Da Feld1 und Feld2 ebenfalls Feldgruppen sind:

    Code:
     
    D MyDS            DS                      Qualified
    D   MyArray                             Dim(10)
    D     Feld1                      10A    Overlay(MyArray)
    D     Feld2                      10I 0  Overlay(MyArray: *Next)
    /Free
        MyDS.Feld1(1) = 'XYZ';
        MyDS.Feld1(2) = 'AAA';
       
        MyDS.Feld2(1) = 'XXX';
        MyDS.Feld2(2) = %Int(MyDS.Feld1(7));
     /End-Free
    Übrigens MyArray ist allein durch die Überlagerung definiert, d.h. es ist keine weitere Definition (wie Längenangabe oder Datentyp) notwendig

    @Baldur
    Glaubst Du, Du bist das einzige arme Schweinchen?
    Ich muss noch alles auf V5R2 runterwandeln ... und bevor der letzte unserer Kunden nicht von V5R2 weg ist, passiert da auch nichts weiter.

    Birgitta
    Hallo Frau Hauser,

    wollte Anhand Ihren Beispiel ein Array sortieren.
    Kann das Array eigentlich Felder besitzen mit Unterschiedlichen Länge, bin da beim Probieren, aber bekomme es einfach nicht gebacken(Dezimaldatenfehler).

    Gruß

    Tarki

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das ist kein Problem, allerdings musst du die Variablen initialisieren (CLEAR).
    Ein automatischer Init passiert ja nur auf dem übergeordneten Feld, Overlays können nicht automatisch initialisiert werden, deshalb sind Dezimalfelder mit BLANK gefüllt.
    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
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von tarkusch Beitrag anzeigen
    Hallo Frau Hauser,

    wollte Anhand Ihren Beispiel ein Array sortieren.
    Kann das Array eigentlich Felder besitzen mit Unterschiedlichen Länge, bin da beim Probieren, aber bekomme es einfach nicht gebacken(Dezimaldatenfehler).

    Gruß

    Tarki
    Sicher geht das! Wenn Du genau hinschaust haben die Felder in meinem Beispiel nicht nur unterschiedliche Datentypen sondern auch unterschiedliche Längen! (Ein Integer-Feld belegt nur 4 Byte).

    Hast Du auch Deine Datenstruktur initialisiert (INZ in der DS Zeile) oder vor dem Verwenden/Fülllen explizit mit CLEAR initialisiert?

    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
    Apr 2012
    Beiträge
    360
    Ich habe die Felder wie folgt initialisiert:
    D QQKST1 s 5 0
    D QQKST2 s 4 0
    D QQTEXT s 10
    D QQFINR s 2 0
    D QQPENR s 4 0

    D MyDsSort DS qualified
    D MyFldgr DIM(999)
    D QQKST1 5 0 Overlay(MyFldgr)
    D QQKST2 4 0 Overlay(MyFldgr: *Next)
    D QQTEXT 10 Overlay(MyFldgr: *Next)
    D QQFINR 2 0 Overlay(MyFldgr: *Next)
    D QQPENR 4 0 Overlay(MyFldgr: *Next)


    Vor dem befüllen im SFL mach ich kein Clear.

    Die DatenStruktur und Feldgruppen werden korrekt befüllt, aber bei dem Befehl SortA MyDsSort.QQFINR; tritt der Fehler auf.

    Gruß

    Tarki

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Code:
                         
    D MyDsSort        DS                  qualified  INZ                             
    D   MyFldgr                           DIM(999)                                
    D     QQKST1                     5  0 Overlay(MyFldgr)                        
    D     QQKST2                     4  0 Overlay(MyFldgr: *Next)                 
    D     QQTEXT                    10    Overlay(MyFldgr: *Next)                 
    D     QQFINR                     2  0 Overlay(MyFldgr: *Next)                 
    D     QQPENR                     4  0 Overlay(MyFldgr: *Next)
    Du musst die Datenstruktur initialisieren!!!
    Entweder durch ein INZ in der Definition oder ein CLEAR auf die Datenstruktur vor dem Befüllen.
    Sonst stehen in den numerischen Feldern *Blanks drin!
    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

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich nehme mal an, dass du eben nicht alle 999 Vorkommen befüllst, somit bleiben die restlichen Vorkommen uninitialisiert so dass der SORTA halt einen Dezimalfehler meldet.

    In ILE kann man (glaube ich) mit %sort() die Anzahl Einträge vorgeben, aber ein Init ist immer besser.
    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

Similar Threads

  1. sorta
    By easchbac in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 01-06-11, 06:46
  2. Sortieren einer Array
    By steven_r in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 22-09-10, 11:35
  3. Datenstruktur mit Mehrfachvorkommen
    By JP in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 09-08-06, 08:35
  4. Wie sortiere ich ab besten ..
    By malzusrex in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 05-05-04, 15:41

Berechtigungen

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