Here is a more detailed example of Crystal Reports' string processing capabilities. The Caesar cipher is a simple code that is traditionally credited to Julius Caesar. In this code, each letter of a word is replaced by a letter five characters further in the alphabet. For example, "Jaws" becomes "Ofbx". Notice that "w" is replaced by "b"; since there are not 5 characters after "w" in the alphabet, it starts again from the beginning.
Here is a formula that implements applying the Caesar cipher to the field {Customer.Customer Name} in the Xtreme database:
//The Caesar cipher //The input string to encrypt Local StringVar inString := {Customer.Customer Name}; 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
In the above example there is an If expression nested within the expression block of the For loop. This If expression is responsible for the precise details of shifting a single character. For example, letters are treated differently from punctuation and spaces. In particular, punctuation and spaces are not encoded. The general points here are that control structures can be nested within other control structures and that multiple expressions can be included in the (parentheses enclosed) expression blocks of other control structures.