2017-08-02 95 views
0
寫在文件超過8個字符

我寫在其中,如果我找到一個線「C」然後我刪除C來自那裏,並追加到下一行10字符代碼在ps文件中。文件中的所有記錄除了一條記錄(可以是任何記錄)以外都有8個字符。 下面是我輸入文件,在其中我更新:無法通過PUSH命令REXX

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手冊中有一個註釋。所以它按照設計工作。

更新的線的長度被設置爲它替換的線的長度。當更新的行比它替換的行長時,超出被替換的行的信息被截斷。當信息比被替換的行更短時,該行用空格填充以獲得原始行長度。