PDA

View Full Version : %subst auf Feldebene bei Logischer Datei



Seiten : [1] 2

Hatl
18-07-08, 12:11
Hallo!


Ist es möglich eine logische Datei so zu definieren, dass nur Sätze angeziegt werden, bei welchen im FELD1 die Zeichen 5-7 je im Bereich zwichen 0-9 liegen.

Also in etwa so %subst(FELD1:5:3) RANGE (0 9)

Vielen Dank für jeden Tipp!

lg

Fuerchau
18-07-08, 12:16
SST (Substring) keyword—logical files only (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzakb/rzakbmsttdsst.htm)

Du kannst so neue Felder definieren und auch in der Auswahl und sogar in den Schlüsseln angeben.

Wichtig:
Berechnete Felder sind als I-Felder zu definieren, diese LF kann dann nur als Input verwendet werden.

Hatl
18-07-08, 13:04
Super, danke! Ist genau was ich suche,
aber was mache ich falsch, hab meinen Datei wie folgt definiert:

A UNIQUE
A R LF08 PFILE(VF8)
A NR R
A AKTK R
A TXT R
A TXT2 I SST(TXT 5 3) RANGE('000' '999')
A**------------------------------------------------------------------------
A K TXT
A K NR


Beim Umwandeln bekomme ich folgenden Fehler:

"Schlüsselwort oder Wert für Feldart oder Konstantenfeld nijcht gültig. Zeichen im angegbenen Feld nicht zulässig. Feld nicht gefunden"

Sollte doch so funktionieren?

Pikachu
18-07-08, 13:24
Wie ist denn die dazugehörige physische Datei definiert?

Fuerchau
18-07-08, 13:44
A TXT2 I SST(TXT 5 3)
A**------------------------------------------------------------------------
A K TXT
A K NR
A S TXT2 RANGE('000' '999')

Hatl
18-07-08, 13:54
Hab mir jetzt noch einen neue Datei erzeugt, aber offenbar passt ihm das SST nicht.
Nehmen ich die Zeile mit SST weg (somit natürlich auch die mit Range) funktioniert es, mit der SST Zeile nicht.
Hab ich das richtg verstanden, das Feld F8AABN muss es auf der PF nicht geben?

Meine PF ist wie folgt definiert:


AUNIQUE
AREF()
ARF8PF01
AF8ABNR RREFFLD(ABNR)
AF8AKTK RREFFLD(AKTK)
AF8ETXT RREFFLD(ETXT)
AF8EVBY RREFFLD(EVBY)
AF8EVCD RREFFLD(EVCD)
AF8EVEY RREFFLD(EVEY)
AF8USRQ RREFFLD(USRQ)
AF8USRZ RREFFLD(USRZ)
AF8VKVS RREFFLD(VKVS)
A**------------------------------------------------------------------------
AKF8ABNR
AKF8EVCD
AKF8EVBY



logische wiefolgt:

AUNIQUE
ARF8LF08 PFILE(WVF8)
AF8ABNR R
AF8AKTK R
AF8ETXT R
AF8AABN ISST(F8ETXT 5 3)
AF8EVBY R
AF8EVCD R
AF8EVEY R
AF8USRQ R
AF8USRZ R
AF8VKVS R
A**------------------------------------------------------------------------
AKF8ETXT
AKF8ABNR
AKF8EVCD
AKF8EVBY
ASF8EVCD CMP(EQ 'ABN')
ASF8EVCD CMP(EQ 'KOM')
ASF8AABN RANGE('000' '999')

Pikachu
18-07-08, 15:11
In welcher Spalte bzw. wo in der Bedienerführung sind denn diese Rs und das I in der logischen Datei angegeben? Kannst du die Definitionen hier im Forum vielleicht besser als CODE (mittels
Quelltextzeilen)schreiben?

RobertMack
18-07-08, 16:25
es braucht nur einmal "S" (and):

ASF8EVCD VALUES('ABN' 'KOM')
A_F8AABN RANGE('000' '999')

Hatl
21-07-08, 08:51
Hallo!

Sorry, das mit den Abständen lässt sich nicht richtig darstellen. (auch mit CODE verschwinden die Leerstellen )

Die Positionen sollten stimmen, ohne der Zeile mit SST kann die Datei ja umgewandelt werden und funktioniert.
Das I steht unter den R. Zwischen R und Feldbezeichnung liegen 4 Leerzeichen. Das R links von der Feldbezeichnung ist ein Leerzeichen entfernt. Das SSI sowie das CMP u. RANGE im LF kommt 15 Leerzeichen nach dem I. Die S u. K liegen untereinander und sind ein Leerzeichen vom Namen entfernt.

Wenn ich die Datei umwandeln möchte bekomme ich in der Zeile, in der das Berechnete Feld definiert ist (F8AABN I SST(F8ETXT 5 3)
) folgenden Fehlermeldungen:

CPD7552: Schlüsselwort oder Wert für Feldart oder Konstantenfeld nicht gültig.
CPD7410: Zeichen im angegebenen Feld nicht zulässig.
CPD7926: Feld nicht gefunden.

Die Meldungen würden für mich bedeuten, dass es das angegeben Feld in der PF nicht gibt. Das ist ja auch so, da das Feld ja nur in der Lf berechnet wird.
Muss ich da noch irgendwo etwas angeben?

Danke!

lg

Pikachu
21-07-08, 09:57
Die Beschreibung ist super, jetzt kann ich die Fehler hier reproduzieren!

Am besten nimmst du die ganzen einzelstehenden R (in Position 29 (http://publib.boulder.ibm.com/iseries/v5r2/ic2929/info/rzakb/rzakbmst22.htm)) aus der logischen Datei raus. Und das I muß weiter nach rechts (in Position 38 (http://publib.boulder.ibm.com/iseries/v5r2/ic2929/info/rzakb/rzakbmst26.htm)), mit 6 Leerzeichen Abstand zum SST (in der Bedienerführung steht das dann unter "Verwendung"). Dann sollte sich die logische Datei wandeln lassen.

Beispiel (nach Eingabe des Zeilenbefehls (F=Formatzeile anzeigen) in der Zeile mit dem berechneten Feld):
A R FORMAT PFILE(FELDP)
A BEZ
.....A..........A.Name++++++.LängeDDsF......Funkt ionen++++++++
A BEZ2 I SST(BEZ 1 4)
A K BEZ
A S BEZ RANGE('000' '999')