Anmelden

View Full Version : sorta



Seiten : 1 [2]

B.Hauser
06-07-12, 10:05
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

tarkusch
06-07-12, 10:38
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

B.Hauser
06-07-12, 11:44
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!

Fuerchau
06-07-12, 12:04
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.

B.Hauser
06-07-12, 12:15
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

tarkusch
06-07-12, 12:35
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

B.Hauser
06-07-12, 12:48
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

tarkusch
06-07-12, 13:00
Du meinst %SUBARR in Verbindung mit SORTA:


/Free
SortA %SubArr(MyArr: StartElem: AnzElem);
/End-Free

Birgitta

Wie erhalte bzw. definiere ich eigentlich StartElem: AnzElem?

Fuerchau
06-07-12, 14:31
Das sind einfach Zahlen, dei Anzahl zählst du beim Füllen, z.B.:

%subarr(MyArr: 1 : 10)

ExAzubi
08-07-12, 16:43
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 :)