Crystal Reports  

For/Next ループの例(Basic 構文)

Crystal Reports の文字列処理機能をさらに多く使用した例を下に示します。シーザー暗号は、ジュリアス シーザーに由来すると伝えられる単純な暗号です。この暗号では、単語内の各文字がアルファベット順に 5 文字だけ後の文字に置換されます。たとえば、“Jaws”は“Ofbx”になります。"w" は "b" に置き換えられています。"w" の後には 5 文字なく、先頭に戻って続けられるので、"w" は "b" に置換されます。

次の式では、シーザー暗号を Xtreme データベースの{Customer.顧客名}フィールドに適用しています。

Rem シーザー暗号
Dim inString '暗号化する入力文字列
inString = {Customer.顧客名}
Dim shift
shift = 5
formula = ""
Dim i
For i = 1 To Len(inString)
Dim inC, outC
inC = Mid(inString, i, 1)
Dim isChar, isUCaseChar
isChar = LCase(inC) In "a" To "z"
isUCaseChar = isChar And (UCase (inC) = inC)
inC = LCase(inC)
If isChar Then
Dim offset
offset = (Asc(inC) + shift - Asc("a")) Mod _
(Asc("z") - Asc("a") + 1)
outC = Chr(offset + Asc("a"))
If isUCaseChar Then outC = UCase(outC)
Else
outC = inC
End If
formula = formula & outC
Next i

上の例では、For/Next ループのステートメント ブロック内に複数行 If ステートメントがネストされています。この If ステートメントは、1 文字ずつを正確に置換していく細かい操作を担当しています。たとえば、アルファベットは区切り記号やスペースとは別の方法で処理され、区切り記号やスペースは暗号化されません。全体としての要点は、制御構造をほかの制御構造内にネストできること、および制御構造のステートメント ブロックに複数のステートメントを挿入できることです。

参照

For/Next ループから抜ける