For ループを使用すると、いくつかの式を繰り返し評価できます。これは、式の評価中に、各式が多くても一度しか評価されない If や Select 式とは対照的です。
式を評価する回数があらかじめわかっている場合は、For ループが最適です。
例 1
{Customer.顧客名}の文字列を反転する必要があるとします。たとえば、“City Cyclists”を“stsilcyC ytiC”にします。
//文字列の反転 - バージョン 1 Local StringVar str := ""; Local NumberVar strLen := Length ({Customer.顧客名}); Local NumberVar i; For i := 1 To strLen Do ( Local NumberVar charPos := strLen - i + 1; str := str + {Customer.顧客名}[charPos] ); str
{Customer.顧客名}フィールドの現在の値が“Clean Air”であるとして、この式がどう機能するかを調べてみます。変数 strLen には、“Clean Air”の長さ 9 が代入されます。変数 i は、For ループが繰り返されるたびにその値が変化することから、“For カウンタ変数”と呼ばれます。つまり、For カウンタ変数は、ループの繰り返し回数をカウントするために使用されます。For ループは、最初に i が 1、次に i が 2、次に i が 3 と変化し、最後に i = 9 になるまで 9 回繰り返されます。最初の繰り返しで、{Customer.顧客名}の 9 番目の文字が空の文字列変数 str に追加されます。したがって、str は、最初の繰り返しの後で“r”になります。2 回目の繰り返しで、{Customer.顧客名}の 8 番目の文字が str に追加されるので、str は“ri”になります。9 回目の繰り返しの後に str が反転文字列“riA naelC”になるまで、この処理が続行されます。
例 2
次の例では、Step 句に負のステップ値 -1 を使用して、上の式をより単純化しています。“Clean Air”の例では、最初の繰り返しで i は 9、2 回目は 8、3 回目は 7 と変化し、最後に 1 になるまで続きます。
//文字列の反転 - バージョン 2 Local StringVar str := ""; Local NumberVar strLen := Length ({Customer.顧客名}); Local NumberVar i; For i := strLen To 1 Step -1 Do ( str := str + {Customer.顧客名}[i] ); str
例 3
最も簡単な形式は、次に示すように、組み込み関数 StrReverse を使用するものです。
//文字列の反転 - バージョン 3 StrReverse ({Customer.顧客名})
Crystal Reports に組み込まれている文字列関数は、従来 For ループなどのループを使って処理されていた文字列操作を数多く実行できます。ただし、For ループは、最も柔軟に文字列を処理できる方法であり、また配列を処理するための機能に優れています。配列は、組み込み関数ではユーザーが目的とする処理をこなせない場合に不可欠な要素です。