Crystal Reports  

For ループの例(Crystal 構文)

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

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

//シーザー暗号
//暗号化する入力文字列
Local StringVar inString := {Customer.顧客名};
Local NumberVar shift := 5;
Local StringVar outString := "";
Local NumberVar i;
For i := 1 To Length(inString) Do
(
Local StringVar inC := inString [i];
Local StringVar outC;
Local BooleanVar isChar :=
LowerCase(inC) In "a" To "z";
Local BooleanVar isUCaseChar :=
isChar And (UpperCase (inC) = inC);
inC := LCase(inC);
If isChar Then
   (
Local NumberVar offset :=
(Asc(inC) + shift - Asc("a")) Mod
(Asc("z") - Asc("a") + 1);
outC := Chr(offset + Asc("a"));
If isUCaseChar Then outC := UpperCase(outC)
   )
Else
outC := inC;
outString := outString + outC
);
outString

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

参照

For ループから抜ける