Anmelden

View Full Version : LIKEDS / QUALIFIED -> Werte von Datei in Struktur



HeiKauf
23-10-04, 10:32
Ich habe folgendes Problem.

In einem alten Programm sind Felder von verschieden Dateien zu einer Struktur zusammen gefasst. nur bei einer Änderung der Struktur werden die entsprechenden Werte in den Dateien geupdatet. Jetzt sollen neue Felder aus den Dateien hinzukommen. Diese müssen aber logisch zusammen gefasst hinzugefügt werden.

Beispiel:

Alte Struktur:
VARI001 100 100
VARI002 101 101
VARI006 102 102
VARI.....
VARI999 199 199
VAR 100 199 DIM(999)
NAMEXXX 200 219
PLZ 220 226
......
FELDER 200 459

Neue Struktur:
VARI001 100 100
VARI002 101 101
VARI003 102 102 Neu
VARI006 103 103
VARI.....
VARI999 199 199
VAR 100 199 DIM(999)
NAMEXXX 200 219
PLZ 220 226
.......
FELDER 200 459


Ich möchte jetzt die logisch zusammen gehörigen Bereiche der großen Datenstruktur in kleine Datenstrukturen unterbringen und dann diese durch QUALIFIED und LIKEDS zusammenführen. Dies klappt soweit dass ich die Strukturen verbinden kann. Die Gesamtstruktur weist aber keine Werte aus der Datei auf.<O:p


Mache ich etwas falsch?
Gibt es eine bessere Methode?<O:p

B.Hauser
23-10-04, 11:50
Hallo,

ich bin nicht ganz sicher, ob ich Dein Problem richtig verstanden habe.

Aber in dem Moment, in dem Du mit qualified arbeitest, ist der Name nicht mehr FELD1 sondern DATENSTRUKTUR.FELD1.

Was hälst Du davon eine Datenstruktur über diese kleinen Datenstrukturen zu legen?



D Adresse DS Qualified based(DummyPtr)
D Vorname 20A
D Name 20A
D Strasse 20A
D PLZ 6P 0
D Ort 20A

D KundenInfo DS qualified
D KundenNr 10A
D LieferAdresse likeDS(Adresse)
D RechnungsEmpf likeDS(Adresse)
D Hauptverwalt likeDS(Adresse)

D LieferantInfo DS likeDS(KundenInfo)
*---------------------------------------------------------
/Free
KundenInfo.LieferAdresse.Ort = 'FRANKFURT';
LieferantInfo.LieferAdresse.Ort = 'MUENCHEN';
/End-Free


Birgitta

HeiKauf
23-10-04, 13:09
Das ist nicht das Problem.
Ich möchte das die Daten durch die Werte aus der Datei gefüllt werden. In den einzelnen Strukturen sind diese Daten auch vorhanden. Um aber einen Vergleich von Daten einem Update vom Benutzer und Daten nach der Veränderung durchführen zukönnen möchte ich die verschiedenen Strukturen zu einer Struktur zusammenfassen. Das gelingt auch. Wenn ich aber die gesammte "große" Datenstruktur anspreche enthält dies nicht die Werte aus der Datei. Ziel des ganzen ist es das ich eine Struktur habe die die ursprünglichen Werte beinhaltet und eine Struktur mit den geänderten Werten. Diese sollen dann verglichen werden. hat sich dann an den Werten etwas geändert soll der Satz in der Datei geupdatet werden.

D Adresse DS Qualified based(DummyPtr)
D Vorname 20A
D Name 20A
D Strasse 20A
D PLZ 6P 0
D Ort 20A

D VAR DS Qualified based(DummyPtr)
D VAR001 20A
D VAR002 20A
D VAR003 20A


D VORHER DS qualified
D LieferAdresse likeDS(Adresse)
D Varianten likeDS(VAR)

C* Struktur NACHHER wie VORHER aufgebaut
C LIKE VORHER NACHHER


C VORHER IFEQ NACHHER
C MOVEL(P) NACHHER VORHER
C UPDATE DATEI
C ENDIF

Datenstruktur VORHER wird durch Werte aus Datei gefüllt.

Fuerchau
23-10-04, 13:47
Dateifelder sind Einzelfelder, die NICHT per Qualified angesprochen werden. D.h., der Feldname der Datei ist nicht mehr identisch zum Feldnamen der Struktur !

Beispiel siehe Birgitta:

FELD1 <= Deteifeld
Struktur.FELD1 <= eigenes Feld der Struktur
Struktur2.FELD1 <= anderes Feld, da andere Struktur

Dein Problem kannst du nur mit Einzel-Move's lösen !
Oder du definierst eben 2 Strukturen:

d DS1 ds extfile(myfile)
d DS2 ds exfile(myfile) prefix(d2)

Durch den Read wird DS1 gefüllt, durch "eval DS2 = DS1" kannst du diese retten und anschließend die Einzelfelder vergleichen.

Qualified geht nicht für Dateien, da diese nicht in Strukturen verarbeitet werden. Erst durch eine Struktur mit identischen Feldnamen erreicht man die Verarbeitung als Struktur.
Macht man dies nicht, sind die Felder ja trotzdem ansprechbar und zwar so als ob man sie als Single-Felder definiert hätte:

D FELD1 S ...

Fuerchau
25-10-04, 13:08
Nachtrag:

Da in RPG ein Feld immer nur einmal vorkommt, kannst du das, was du vorbereitet hast doch verwenden:

D Adresse DS
D Feld1 30
D Feld2 30
:
:

D SVAdresse ds likeds(Adresse) qualified

In die Struktur Adresse werden die Daten beim Lesen übertragen.
Per EVAL kannst du nun die Strukturen sichern (eben nicht jedes Feld einzeln) und so anschließend die Strukturen vergleichen.

Es gibt nun das Feld "Feld1" als auch das Feld "SVAdresse.Feld1".