PDA

View Full Version : Existenzprüfung einer Datei im IFS



dino
08-12-14, 14:35
Mit welchem Befehl in einem CL kann ich die Existenz eines bestimmten Dateinamens in einem IFS-Ordner abfragen?

Robi
08-12-14, 14:44
Wir machen das seid gefühlten 20 Jahren so


CHGVAR VAR(&PFAD) VALUE(&PFAD *TCAT &IFSFILE)
CHGVAR VAR(&PFAD2) VALUE(&PFAD *TCAT '#')
CHGVAR VAR(&IFS2) VALUE(&IFSFILE *TCAT '#')


RNM OBJ(&PFAD) NEWOBJ(&IFS2)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(FEHLER))
RNM OBJ(&PFAD2) NEWOBJ(&IFSFILE)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(FEHLER))
GOTO CMDLBL(ENDE)

Robi
(der weis das es warsch. eleganter geht)

mmaschke
08-12-14, 14:52
Es funktioniert auch mit CHKOUT.

Wenn CHKOUT erfolgreich war anschließend CHKIN.

Manfred

andreaspr@aon.at
08-12-14, 16:10
Oder mit einer C-Funktion ...


PGM PARM(&OBJ)

DCL VAR(&OBJ) TYPE(*CHAR) LEN(256)
DCL VAR(&RTNVALINT) TYPE(*CHAR) LEN(4)
DCL VAR(&RTNVAL) TYPE(*CHAR) LEN(2)
DCL VAR(&PATH) TYPE(*CHAR) LEN(100)
DCL VAR(&END) TYPE(*CHAR) LEN(1) VALUE(X'00')
DCL VAR(&BUF) TYPE(*CHAR) LEN(4096)

CHGVAR VAR(&PATH) VALUE(&OBJ *TCAT &END)

CALLPRC PRC('stat') PARM(&PATH &BUF) +
RTNVAL(%BIN(&RTNVALINT 1 4))

CHGVAR VAR(&RTNVAL) VALUE(%BIN(&RTNVALINT))

IF COND(&RTNVAL *NE '00') THEN(SNDPGMMSG +
MSGID(CPF9897) MSGF(QCPFMSG) +
MSGDTA('Object ' *TCAT &OBJ *BCAT ' not +
found.') MSGTYPE(*ESCAPE))

ENDPGM

malzusrex
08-12-14, 16:55
Und noch eine Variante ;-)


d File s *
d rc s 10I 0
d F_OK c const(0)
d
d PM_File s 255
d PM_Return s n
d
d True c *On
d False c *Off
d
*-- IFS stream file functions: -----------------------------------**
d access Pr 10I 0 ExtProc( 'access' )
d dPath * value Options( *String )
d amode 10i 0 value

c *Entry PList
c Parm PM_File
c Parm PM_Return
c
C If access( %Trim( PM_File ) : F_OK) <> 0
C Eval PM_Return = False
C Else
C Eval PM_Return = True
c EndIf
c
c Eval *InLr = True

dino
09-12-14, 13:12
Danke für die Tipps. WRKLNK mit entspr. MONMSG-Nr. bringt mich weiter.

Fuerchau
09-12-14, 13:20
Bedenke:
WRKLNK ist ein Dialog-Befehl!
Wenn du im Batch bist, schlägt der Befehl auch mit Fehler zu wenn die Datei existiert aber kein Bildschirm da ist.

Im CLP bist du mit CHKOUT/CHKIN besser bedient.

Fuerchau
09-12-14, 13:21
Nachtrag 2:
Im Dialog muss der Bediener dann auch noch Enter drücken wenn die Datei da ist, damit dein Programm weitermacht.

dino
09-12-14, 14:25
Ja klar, meinte auch "DSPLNK"

Fuerchau
09-12-14, 14:40
Tut mir leid, aber auch das ist blöd.
Wenn die Datei da ist gibt's immer einen Spool, wer soll was damit machen?

Warum wehrst du dich so gegen die CHKxxx-Befehle?