PDA

View Full Version : DDS für logische Datei



KaFi
02-12-09, 17:36
Hallo,

ich hab mal wieder eine kurze Frage:

In einer vorhandenen physischen Datei gibt es u.a. ein numerisches Feld ACDATU 6S 0. Dieses Feld enthält das Datum in der Form TTMMJJ.

Nun muss ich diese Datei mit einem RPGLE-Programm nach Datum sortiert abarbeiten. Dazu bräuchte ich das datum in der Form JJJJTTMM.

Ich hab jetzt schon verschiedenes versucht um mir eine entsprechende logische Datei zusammenzustellen. Mein letzter Versuch sieht folgendermaßen aus:



A JH 2S 0I VALUES(20)
A TT 2S 0I SST(ACDATU 1 2)
A MM 2S 0I SST(ACDATU 3 2)
A JJ 2S 0I SST(ACDATU 5 2)
A ACDATU8 I CONCAT(JH JJ MM TT)
A K ACDATU8


Das funktioniert so nicht ... es erscheinen mehrere CPD-Meldungen:

CPD7554 - Schlüsselwort nicht gültig
CPD7926 - Feld nicht gefunden
CPD7948 - Name des Schlüssel-, ... -Felds nicht gefunden
:( :( :(

Das Format der physischen Datei ist mir vorgegeben und kann ich (leider) nicht ändern.

Hat jemand eine Idee, wie ich die logische Datei definieren muss, damit das funktioniert ?

Vielen Dank im voraus.

Gruß

KaFi

Fuerchau
02-12-09, 18:40
Mehrere Ursachen:

VALUES ist nur eine Prüffunktion für die Definition in DSPF's und füllt die Variable nicht.
Ein Schlüsselwert für Konstante gibts auch nicht.

SST geht nicht auf gepackten Feldern.
Ggf. funktioniert CONCAT auch mit nur einem Feld, so dass du das gepackte in zoned wandeln kannst:

ACDATZ I CONCAT(ACDATU)
ACJJ I SST(ACDATZ 5 2)
ACMM I SST(ACDATZ 3 2)
ACTT I SST(ACDATZ 1 2)

ACDAT6 I CONCAT(ACJJ ACMM ACTT)

Besser wäre aber wohl eine View und das bearbeiten mit SQL:

substr(digits(ACDATU), 5, 2) concat
substr(digits(ACDATU), 3, 2) concat
substr(digits(ACDATU), 1, 2) concat

BenderD
03-12-09, 07:31
... die 20 könnte man sich natürlich als Feldinhalt aus einer anderen Datei holen... (Datei Konstanten anlegen, mit Feld Jahrhundert und einem Satz und da steht dann im Feld Jahrhundert die 20 drin...)
Wenn das mit dem SST nicht geht, wg. gepackt, dann könnte man das immer noch mit einer Zuordnungstabelle (die hat dann beide Huddelfelder), die man mit joined toppen.

D*B,
der nicht versteht, was sich Entwickler bei solchem Huddel gedacht haben


Mehrere Ursachen:

VALUES ist nur eine Prüffunktion für die Definition in DSPF's und füllt die Variable nicht.
Ein Schlüsselwert für Konstante gibts auch nicht.

SST geht nicht auf gepackten Feldern.
Ggf. funktioniert CONCAT auch mit nur einem Feld, so dass du das gepackte in zoned wandeln kannst:

ACDATZ I CONCAT(ACDATU)
ACJJ I SST(ACDATZ 5 2)
ACMM I SST(ACDATZ 3 2)
ACTT I SST(ACDATZ 1 2)

ACDAT6 I CONCAT(ACJJ ACMM ACTT)

Besser wäre aber wohl eine View und das bearbeiten mit SQL:

substr(digits(ACDATU), 5, 2) concat
substr(digits(ACDATU), 3, 2) concat
substr(digits(ACDATU), 1, 2) concat

Fuerchau
03-12-09, 10:16
Die Datenhaltung sieht mir verdächtig nach vorherigem Jahrhundert aus.

Pikachu
03-12-09, 11:27
Nach Datum sortiert müßte doch auch so gehen:

A R DATF PFILE(DATP)
A TT I SST(DATUM 1 2)
A MM I SST(DATUM 3 2)
A JJ I SST(DATUM 5 2)
A K JJ
A K MM
A K TT

KaFi
03-12-09, 12:43
Vielen Dank für eure zahlreichen Antworten.

Den Vorschlag von Pikachu werde ich nachher mal umsetzen.

@Fuerchau: Tatsächlich, die Art der Datenhaltung stammt aus dem letzten Jahrhundert ... ;) Nichtsdestotrotz muss ich damit irgendwie klarkommen. ;)

Gruß

KaFi

Fuerchau
03-12-09, 13:21
Wie gesagt, SST geht nicht bei gepackten Feldern sondern nur bei Zeichen und Zoned.