2017-08-02 1 views
0

私は行の10文字目を "C"と見なしてそこからCを削除して次の行に追加するコードを書いていますpsファイルで。ファイル内のすべてのレコードは、1つのレコード(任意のレコードでも可)を除く8文字です。REXXのPUSHコマンドで8文字以上のファイルを書き込めません

A2f6k1GG C 
B3g7l2HH 
C4h8m3II 
D5i9n4JJ 

所望の出力は次のとおりです:

A2f6k1GG 
B3g7l2HH C 
C4h8m3II 
D5i9n4JJ 

マイREXXコードは次のとおりです。私は受け付けており

/*REXX*/ 
TRACE I 
/* READ PASSWORD FILE */           
ADDRESS TSO "ALLOC F(INFILE1) DSN('PPPRG3.PASSWRD.LIST') SHR REU" 
/* INFILE1 is a logical name for the file */      
"EXECIO * DISKR INFILE1 (FINIS STEM PASSWRD."      
/* PASSWRD is the stem (array) that holds the data */    
"FREE F(INFILE1)"             
STRING1 = ""              
STRING2 = ""              
/* S12 = STRING1 || " " || STRING2 */        
J = 1                
DO J = 1 TO PASSWRD.0            
    PASSWRD.J = STRIP(PASSWRD.J)         
    IF SUBSTR(PASSWRD.J,10,1) = "C" THEN        
    DO               
     STRING1 = SUBSTR(PASSWRD.J,1,8)        
     Y = J +1             
     STRING2 = PASSWRD.Y           
     SAY STRING1 STRING2           
     ST3 = STRIP(STRING2,"B"," ") || " C"       
     SAY ST3              
     ADDRESS TSO "ALLOC DA('PPPRG3.PASSWRD.LIST') F(updatedd) OLD" 
     "EXECIO 1 DISKRU updatedd "J" (LIFO"       
     PULL line              
     PUSH STRING1             
     "EXECIO 1 DISKW updatedd"          
     SAY "UPDATE1"             
     "EXECIO 1 DISKRU updatedd "Y" (LIFO"       
     PULL line              
     PUSH ST3            
     "EXECIO 1 DISKW updatedd (FINIS"        
     SAY "UPDATE2"             
     "FREE F(updatedd)"            
    END                
    ELSE                
    J = J + 1              
END  

出力は次のとおりです。

以下はその中で私が更新しています私の入力ファイルです
A2f6k1GG 
B3g7l2HH 
C4h8m3II 
D5i9n4JJ 
+0

私の入力ファイルはVB形式です。私はそれをFBに変更しましたが、今は正常に動作しています。 – bp89

答えて

0

マニュアルにEXECIOとDISKWに関するメモがあります。だからそれは設計どおりに動作します。

更新された行の長さは、それが置き換えられる行の長さに設定されます。更新された行が、それが置き換えられる行よりも長い場合、置き換えられた行を超える情報は切り捨てられます。情報が置き換えられた行よりも短い場合は、元の行の長さになるように空白が埋められます。

関連する問題