0

我创建了一个 rexx 程序来从参数中读取文件并逐行将其添加到数组中成员到 pds 并用搜索结果填充它。它可以工作,但会引发一堆错误。

这是代码

/* REXX READ FILE */                        
/*                            */            
/*                            */            
/*                            */            
/*                            */            
ARG INFILE                                  
IF ARG() = 0 THEN                           
 DO                                         
 SAY 'INPUT REQUIRED'                       
 EXIT                                       
 END                                         
/*                            */            
/*                            */            
SAY 'WHAT IS THE STRING YOU ARE LOOKING FOR'
PULL SEARCHLINE                             
IF SEARCHLINE = "" THEN                     
   DO                                       
     SAY 'YOU DID NOT ENTER A STRING'       
     SAY 'PLEASE ENTER ONE NOW'          
     PULL SEARCHLINE                     
   END                                   
/*                            */         
/*                            */         
/*                            */         
/* VALIDATING FILE EXISTANCE*/           
  INDDFILE = INFILE                        
  "LISTC NVSAM ENT('"INDDFILE"') "         
   IF RC = 0 THEN                           
     DO                                       
      SAY "FOUND" INDDFILE                     
    END                                      
    ELSE DO                                  
    SAY  INDDFILE 'NOT FOUND'                
EXIT                                     
END                                      

/**************************************/ 
"ALLOC F(INFILE) DSN('"INDDFILE"')SHR REU"  
"EXECIO * DISKR INFILE ( FINIS STEM MYFILE."
"FREE F(INFILE)"                            
STRLENG = LENGTH(SEARCHLINE)                
INDEX = 0                                       
I = 1                                       
DO WHILE I <= MYFILE.0                      
  RESULT = POS(SEARCHLINE,MYFILE.I)         
     IF RESULT /= 0 THEN                    
        DO                                  
        MATCH.INDEX =LEFT(MYFILE.I,12)      
        SAY MATCH.INDEX                     
        SAY INDEX                           
        INDEX = INDEX +1                    
        END                                 

 I = I + 1                                  
 END                                        
 SAY "WHAT IS THE OUT PUT FILE? "           
PULL FILE                                                   
FILE1 = FILE                                                
SAY "WHAT WILL THE MEMBER BE CALLED?"                       
PULL MEMBER                                                 
/*******************************************/               
/*******************************************/               
ADRESS TSO                                                      
"ALLOC DA('"FILE1"') F(ABCD) NEW SPACE(10,20)DIR(100)TRACKS"
"FREE F(ABCD)"                                              
/*******************************************/               
"ALLOC FI(ABCD) DA('"FILE1"("MEMBER")')SHR"                 
"EXECIO" INDEX "DISKW ABCD (STEM MATCH. FINIS"              
"FREE F(ABCD)"                                              
IF RC <> 0 THEN DO                                          
 SAY "ERROR IN ALLOCATING THE PDS MEMBER" RC                
 END                                                        
EXIT      

这是我的错误

未找到命令地址
63 -地址 TSO
+++ RC(-3) +++ 数据集 QXGCVNH.OUTLIB 未分配+ IGD17101I 数据集 Q*****H.OUTLIB 未定义,因为目录返回代码中存在重复名称为 8原因代码是 38 IGG0CLEH 文件 ABCD 未释放,未分配

谁能建议我可以做些什么来纠正错误,所以我不会那样跑?有人可以建议是否有办法只返回您输入的字符串而不是整行?

谢谢

4

2 回答 2

1
  1. 在第 63 行将 ADDRESS TSO 更改为 ADDRESS TSO
  2. 在分配之前检查 FILE1 是否存在,您可以使用 SysDSN、Listds、listcat 等来执行此操作。

基本上:

ADRESS TSO                                                      
"ALLOC DA('"FILE1"') F(ABCD) NEW SPACE(10,20)DIR(100)TRACKS"
"FREE F(ABCD)"    

基本上变成

ADDRESS TSO 
if (File1 exists) then do                                           
    "ALLOC DA('"FILE1"') F(ABCD) NEW SPACE(10,20)DIR(100)TRACKS"
    "FREE F(ABCD)"    
end

你需要知道怎么做(文件1存在),只需谷歌检查各种选项

于 2016-02-05T21:40:44.153 回答
0

关于只返回字符串。您可能希望查看一些 Rexx 字符串处理函数。也许 Strip 可以提供帮助。

于 2016-02-06T09:18:43.273 回答