RPG

405. フリー・フォーマットのLOOP文

固定形式で記述する DO-WHILE文はそのままでは
フリー・フォーマットでのLOOP文の書き方を紹介する。

固定形式での多く使われていた DO-*HIVAL文は

0001.00 H DFTNAME(TESTLOOP2) DATEDIT(*YMD/) BNDDIR('QC2LE')                     
0002.00 F********** LOOP 文の使い方 ******************************************* 
0003.00 FSHOHIN    IF   E           K DISK                                      
0004.00 F********************************************************************** 
0005.00                                                                         
0006.00 C                   DO        *HIVAL                                    
0007.00 C                   READ      SHOHIN                                 50 
0008.00 C   50              LEAVE                                               
0009.00 C                   ENDDO                                               
0010.00 C                   SETON                                        LR     
0011.00 C                   RETURN                                              

をフリー・フォーマットで書くと

[フリー・フォーマットのDO-WHILE文]

0001.00 H DFTNAME(TESTLOOP2) DATEDIT(*YMD/) BNDDIR('QC2LE')                    
0002.00 F********** LOOP 文の使い方 *******************************************
0003.00 FSHOHIN    IF   E           K DISK                                     
0004.00 F**********************************************************************
0005.00                                                                        
0006.00  /FREE                                                                 
0007.00    DOW %EOF = *OFF;                                                    
0008.00      READ SHOHIN;                                                      
0009.00    ENDDO;                                                              
0010.00    *INLR = *ON;                                                        
0011.00    RETURN;                                                             
0012.00  /END-FREE                                                             

という感じになる。
指数をカウント・アップするLOOPは

0001.00 H DFTNAME(TESTLOOP4) DATEDIT(*YMD/) BNDDIR('QC2LE')                     
0002.00 F********** LOOP 文の使い方 ******************************************* 
0003.00 F*                                                                      
0004.00 F********************************************************************** 
0005.00                                                                         
0006.00 D MSR             S            100    DIM(13)                           
0007.00 D N               S              4S 0                                   
0008.00 D MAX             S              4S 0                                   
0009.00 D MSG             S            100A                                     
0010.00                                                                         
0011.00 C                   EVAL      MAX = %ELEM(MSR)                          
0012.00 C     1             DO        MAX           N                           
0013.00 C                   MOVEL(P)  MSR(N)        MSG                         
0014.00 C                   ENDDO                                               
0015.00 C                   SETON                                        LR     
0016.00 C                   RETURN                                              

同じことをフリー・フォーマットで記述すると

[フリー・フォーマットのDO-LOOP文]

0001.00 H DFTNAME(TESTLOOP4) DATEDIT(*YMD/) BNDDIR('QC2LE')                    
0002.00 F********** LOOP 文の使い方 *******************************************
0003.00 F*                                                                     
0004.00 F**********************************************************************
0005.00                                                                        
0006.00 D MSR             S            100    DIM(13)                          
0007.00 D N               S              4S 0                                  
0008.00 D MAX             S              4S 0                                  
0009.00 D MSG             S            100A                                    
0010.00                                                                        
0011.00  /FREE                                                                 
0012.00     FOR  N = 1 TO %ELEM(MSR);                                          
0013.00       MSG = MSR(N);                                                    
0014.00     ENDFOR;                                                            
0015.00     *INLR = *ON;                                                       
0016.00     RETURN;                                                            
0017.00  /END-FREE                                                             

このような処理を FOR-LOOP文と呼ぶがあるメール配信の解説では FOR-EACH文と説明していたが
C言語を始めとする他のあらゆる言語でも FOR-EACH文という表現は聞いたことがない
VBAでFOR-EACHというのがあるがここでもEACHなんてどこにも使っていない。
正しくはFOR-LOOP文というべきである。