crystal报告switch语句没有正确响应

时间:2014-05-08 21:19:08

标签: crystal-reports

为什么我的代码没有正确读取Switch语句中的值?代码如下。

我已经验证它正确迭代,一次一个字符,并且数字字符看起来与条件匹配。但是每个字符都由默认值处理,没有条件处理。

Local StringVar inString := "X12y1023" ;
Local StringVar outString; 
Local NumberVar i :=1; 
...
While i <= Length(inString) 
Do (
   Local StringVar inC := mid(inString, i, 1);
   Local StringVar outC;
   Switch( 
      inC = "1", outC := "!", 
      inC = "2", outC := "Z", 
      inC = "3", outC := "E",
      ... 
      inC = "0", outC := "O", 
      True, outC := inC
     );
   outString := outString + outC;
   i := i+1;
);
outString;

为了证明在默认条件之上的任何点都没有读取数字字符(并且每次迭代的长度只有一个字符),我按如下方式修改了True:

  True, outC := inC  + "_" + Cstr(Length(inC)) + ", "

输出生成 X_1,1_1,2_1,y_1,1_1,0_1,2_1,3_1,

我错过了什么?

由于

1 个答案:

答案 0 :(得分:0)

switch声明并不意味着以您尝试使用它的方式使用;它意味着返回简单值而不是更复杂的语句,如变量赋值。我猜你所看到的行为可能只是该功能的具体实施的副产品。

相反,您可以使用case-statement或重新排列switch,以便它仅用于返回简单值。

//Your code changed to use a case-statement
Local StringVar inString := "X12y1023" ;
Local StringVar outString; 
Local NumberVar i :=1; 

While i <= Length(inString) 
Do (
   Local StringVar inC := mid(inString, i, 1);
   Local StringVar outC;
   Select inC
    Case "1" : outC:="!"
    Case "2" : outC:="Z"
    Case "3" : outC:="E"
    Case "0" : outC:="O"
    Default : outC:=inC;
   outString := outString + outC;
   i := i+1;
   );
outString;

或者

//Your code rearranged to use switch as intended
Local StringVar inString := "X12y1023" ;
Local StringVar outString; 
Local NumberVar i :=1; 

While i <= Length(inString) 
Do (
   Local StringVar inC := mid(inString, i, 1);
   outString := outString +
     switch(
      inC = "1", "!",
      inC = "2", "Z",
      inC = "3", "E",
      inC = "0", "O",
      True, inC);
   i := i+1;
   );
outString;