固定形式で記述する 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文というべきである。