Crystal reports crystal reports开关语句响应不正确

Crystal reports crystal reports开关语句响应不正确,crystal-reports,Crystal Reports,为什么我的代码不能正确读取Switch语句中的值?代码如下 我已经验证了它是正确的迭代,一次迭代一个字符,并且数字字符似乎与条件匹配。但是每个字符都是默认处理的,没有一个字符是由条件处理的 Local StringVar inString := "X12y1023" ; Local StringVar outString; Local NumberVar i :=1; ... While i <= Length(inString) Do ( Local StringVar in

为什么我的代码不能正确读取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;
产出产生 X_1,1_1,2_1,y_1,1_1,0_1,2_1,3_1

我错过了什么


谢谢

一个
开关
语句并不是真的要按照您试图使用它的方式来使用的;它用于返回简单的值,而不用于更复杂的语句,如变量赋值。我猜您看到的行为可能只是函数特定实现的副产品

相反,您可以使用
case语句
或重新排列
开关
,使其仅用于返回简单值

//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;
//您的代码已更改为使用case语句
本地StringVar指令:=“X12y1023”;
局部突出;
局部数为i:=1;

而我只是建议,如果开关不工作,为什么不试试如果,否则如果你的要求
//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;