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 が割り振られていません+理由コードは 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

ただし、方法を実行する必要があります(File1が存在します)。さまざまなオプションを確認してグーグルで検索してください

于 2016-02-05T21:40:44.153 に答える
0

文字列のみを返すことに関して。Rexx 文字列処理関数のいくつかを確認したい場合があります。おそらく、ストリップが助けてくれるでしょう。

于 2016-02-06T09:18:43.273 に答える