Ibm midrange 创建接受对象名称作为参数的iSeries命令
我正在尝试在iSeries上创建一个新命令,其中一个参数必须是使用标准库/文件成员语法的文件名,如Ibm midrange 创建接受对象名称作为参数的iSeries命令,ibm-midrange,control-language,Ibm Midrange,Control Language,我正在尝试在iSeries上创建一个新命令,其中一个参数必须是使用标准库/文件成员语法的文件名,如 MYCMD FILE(MYLIB/MYFILE MYMEMBER) 甚至 MYCMD FILE(MYLIB/MYFILE) MEMBER(MYMEMBER) 我试图: 使用FILE参数和*CHAR类型创建PARM语句 使用ELEM语句创建特殊类型 但是我找不到如何创建一个参数来接受一个限定对象名的值,比如CPYTOIMPF使用的FROMFILE参数 更新 JamesA的答案很好,但不知何故
MYCMD FILE(MYLIB/MYFILE MYMEMBER)
甚至
MYCMD FILE(MYLIB/MYFILE) MEMBER(MYMEMBER)
我试图:
- 使用FILE参数和*CHAR类型创建PARM语句
- 使用ELEM语句创建特殊类型
PARM KWD(FILE) TYPE(FNAME) PROMPT('CL +
source' 1)
FNAME: ELEM TYPE(FILE) PROMPT('File')
ELEM TYPE(*NAME) LEN(10) PROMPT('Source +
member')
FILE: QUAL TYPE(*NAME) LEN(10)
QUAL TYPE(*NAME) DFT(*CURLIB) SPCVAL(*CURLIB) PROMPT('Library') LEN(10) MIN(0)
CMD
PARM KWD(FILE) TYPE(Q1) PROMPT('File')
PARM KWD(MBR) TYPE(*NAME) LEN(10) DFT(*FIRST) SPCVAL(*FIRST) PROMPT('Member')
Q1: QUAL TYPE(*NAME) LEN(10)
QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) SPCVAL(*LIBL) PROMPT('Library')
CL
PGM PARM(&PFIC &OUTFILE &CODEPAGE)
DCL VAR(&PFIC) TYPE(*CHAR) LEN(32)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&FILE) TYPE(*CHAR) LEN(10)
DCL VAR(&MEMBER) TYPE(*CHAR) LEN(10)
CHGVAR VAR(&FILE) VALUE(%SST(&PFIC 3 10))
CHGVAR VAR(&LIB) VALUE(%SST(&PFIC 13 10))
CHGVAR VAR(&MEMBER) VALUE(%SST(&PFIC 23 10))
PGM PARM(&FILELIB &MBR)
DCL VAR(&FILELIB) TYPE(*CHAR) LEN(20)
DCL VAR(&MBR) TYPE(*CHAR) LEN(10)
DCL VAR(&FILE) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
CHGVAR VAR(&FILE) VALUE(%SST(&FILELIB 1 10))
CHGVAR VAR(&LIB) VALUE(%SST(&FILELIB 11 10))
. . .
ENDPGM
你需要使用一种新的方法
CMD
PARM KWD(FILE) TYPE(FNAME) PROMPT('CL +
source' 1)
FNAME: ELEM TYPE(FILE) PROMPT('File')
ELEM TYPE(*NAME) LEN(10) PROMPT('Source +
member')
FILE: QUAL TYPE(*NAME) LEN(10)
QUAL TYPE(*NAME) DFT(*CURLIB) SPCVAL(*CURLIB) PROMPT('Library') LEN(10) MIN(0)
CMD
PARM KWD(FILE) TYPE(Q1) PROMPT('File')
PARM KWD(MBR) TYPE(*NAME) LEN(10) DFT(*FIRST) SPCVAL(*FIRST) PROMPT('Member')
Q1: QUAL TYPE(*NAME) LEN(10)
QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) SPCVAL(*LIBL) PROMPT('Library')
CL
PGM PARM(&PFIC &OUTFILE &CODEPAGE)
DCL VAR(&PFIC) TYPE(*CHAR) LEN(32)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&FILE) TYPE(*CHAR) LEN(10)
DCL VAR(&MEMBER) TYPE(*CHAR) LEN(10)
CHGVAR VAR(&FILE) VALUE(%SST(&PFIC 3 10))
CHGVAR VAR(&LIB) VALUE(%SST(&PFIC 13 10))
CHGVAR VAR(&MEMBER) VALUE(%SST(&PFIC 23 10))
PGM PARM(&FILELIB &MBR)
DCL VAR(&FILELIB) TYPE(*CHAR) LEN(20)
DCL VAR(&MBR) TYPE(*CHAR) LEN(10)
DCL VAR(&FILE) TYPE(*CHAR) LEN(10)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
CHGVAR VAR(&FILE) VALUE(%SST(&FILELIB 1 10))
CHGVAR VAR(&LIB) VALUE(%SST(&FILELIB 11 10))
. . .
ENDPGM
谢谢就像一个符咒,除了出于某种奇怪的原因,我需要从位置3而不是1开始%SST,前两个字符是垃圾。我更新了我的帖子以显示我的定义。有什么想法吗?那是因为FILE关键字被定义为一个列表。它指向FNAME,它有两个元素。按照James的回答使用QUAL,不带ELEM.@T.Fabre当使用
ELEM
时,参数变成一个值列表,前2个字节是一个*INT
值,指示传递了多少个元素。