View Full Version : sorta
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
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
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!
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.
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.
Du meinst %SUBARR in Verbindung mit SORTA:
/Free
SortA %SubArr(MyArr: StartElem: AnzElem);
/End-Free
Birgitta
Ich will im PGM die Auswahl-Möglichkeit für die Sortierung des SFL geben.
Entweder soll das Array nach QQPENR, QQKST1 oder QQKST2
gereiht werden.
Ich dachte mir das Befehl dann etwa so lautet:
SortA MyDsSort(*).QQKST1
Ich will im PGM die Auswahl-Möglichkeit für die Sortierung des SFL geben.
Entweder soll das Array nach QQPENR, QQKST1 oder QQKST2
gereiht werden.
Ich dachte mir das Befehl dann etwa so lautet:
SortA MyDsSort(*).QQKST1
Das wäre die Variante für eine Array-Datenstruktur was erst mit Release 7.1 möglich ist.
Die andere Variante geht schon ab V5R2 und sieht einfach so aus:
SortA MyDSSort.QQKST1;
SortA MYDSSort.QQKST2;
Birgitta
Du meinst %SUBARR in Verbindung mit SORTA:
/Free
SortA %SubArr(MyArr: StartElem: AnzElem);
/End-Free
Birgitta
Wie erhalte bzw. definiere ich eigentlich StartElem: AnzElem?
Das sind einfach Zahlen, dei Anzahl zählst du beim Füllen, z.B.:
%subarr(MyArr: 1 : 10)
Ich bin mir ziemlich sicher, da ich meine es mal so gelöst zu haben.
Die DS Unterfelder habe jeweils mit einem eignen INZ-Wert geschrieben. Also
d Feld 1 Overlay(xyz:*next)inz(*Hival)
d Feld 1 Overlay(xyz:*next)inz(*LOVAL)
Mit einem RESET wurden beide Felder unterschiedlich initalisier!
Wie gesagt bin der Meinung und nicht 100% sicher :)