2012-07-03 56 views
5

我試圖在iSeries,其中參數之一具有使用標準庫/文件成員語法是一個文件名,創建一個新的命令,像創建接受一個對象名作爲參數的iSeries命令

MYCMD FILE(MYLIB/MYFILE MYMEMBER) 

甚至

MYCMD FILE(MYLIB/MYFILE) MEMBER(MYMEMBER) 

我想:

  • 創建使用FILE第一個PARM聲明計有* CHAR類型
  • 使用ELEM語句

創建一個特殊類型,但我無法找到如何創建一個接受值是一個合格的對象名稱的參數,如所使用的FROMFILE參數CPYTOIMPF。

UPDATE

JamesA的回答能正常工作,但不知何故,我得到了我的CL的可變兩個額外的字符:

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)   

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))  

回答

6

您需要使用Qualifier Definition

CMD

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(&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 
+0

謝謝!工作就像一個魅力,除了一些奇怪的原因,我需要%SST%。 3而不是1,前兩個字符是垃圾。我更新了我的帖子以顯示我的定義。有任何想法嗎 ? –

+2

這是因爲FILE關鍵字被定義爲一個列表。它指向具有2個ELEM的FNAME。按照James的回答,在沒有ELEM的情況下使用QUAL。 –

+0

謝謝,我會這樣做 –

相關問題