PDA

View Full Version : sorta



Seiten : [1] 2

philsturm
08-12-11, 13:28
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!

Fuerchau
08-12-11, 13:40
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

B.Hauser
08-12-11, 13:45
So unterstützt der SORTA das leider nicht:

Stimmt nicht!
Ab Release 7.1 können Array-Datenstrukturen SO sortiert werden:


/Free
SortA Array(*).Feld2;
/End-Free

Birgitta

Fuerchau
08-12-11, 13:51
Sehr schön, aber was nützt mir das jetzt auf V5 oder V6 ?
Vor Ende 2012 habe ich da wohl keine Chance :).

philsturm
08-12-11, 13:52
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?

B.Hauser
08-12-11, 14:06
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:



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

Fuerchau
08-12-11, 14:08
Wie schon immer. Jedes einzelne Feld ist mit Index ansprechbar:

D Index s 5I

Index = 2;
Feld1(Index) = ...
if Feld1(Index) = ...
endif;

usw.

philsturm
08-12-11, 14:19
Das funktioniert! Danke!

Jetzt hab ich nur noch ein Problem.

Wenn ich dann an der gewünschten Stelle ein sorta feld2 mache und danach das array mittels eines schleife und eines index auslese, sind die felder alle leer und er fliegt aus dem Programm.


UPDATE: Ich korriegiere. Aus dem Programm fliegt er nicht mehr (War ein Dezimaldatenfehler). Aber die Felder die ausgegeben werden sind immer noch leer.


UPDATE2: Problem gelöst. Ich hatte Ascend oder Descend im Array vergessen

tarkusch
06-07-12, 09:27
Musst Du nicht! Da Feld1 und Feld2 ebenfalls Feldgruppen sind:



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

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