Crystal Reports - For循环中的总计 - 意外结果

时间:2015-05-29 20:43:29

标签: loops for-loop crystal-reports integer

我已经编写了15年,知道多种语言,C#,C ++,PHP,PAWN,SMALL,ETC等。 Crystal语法可能是我见过的最不一致和荒谬的。

无论如何,我想在这里做一些简单的事情。我的db中有一个像这样的字符串: " 1-DESC,2-OTHER,5-MISC"

' - '和','是在我的代码中拆分字符串的分隔符。无论如何,我需要添加1 + 2 + 5,以便CR报告这些数字的总和。由于某些原因,在以下代码中,我一直得到" 30.00"当我应该得到10.我无法理解CR是如何做到的......

//create an array of strings by parsing a underscore-delimited string field
Stringvar Array strings := Split({Estim.User_Memo1}, ', ');

numbervar i; 
numbervar total = 0;
numbervar total2 = 0;
For i := 1 to count(strings) Do
( 
    If InStr(strings[i], '-') > 0 then 
    (
        Stringvar Array numdesc := Split(strings[i], '-');
        total2 := ToNumber(numdesc[1]);
        total := total + total2;
        //total := total + ToNumber(numdesc[1]);
    );
);

total;

我的数据库输入字符串是:" 1-Cracked Head,2-No Threads,3-O / S Length,4-U / S Length"

请原谅我的冗余总变量。我一直试图找到大约一个小时的解决方法。

感谢您的任何见解。

2 个答案:

答案 0 :(得分:0)

首先,您需要指定使用:所需的值。

现在可以使用Val函数来检索数字,该函数将以数字格式返回字符串中的数字,这将使对数操作变得容易。

试试这个...目前我没有CR来测试语法..但逻辑是这样的。

//create an array of strings by parsing a underscore-delimited string field
Stringvar Array strings := Split({Estim.User_Memo1}, ', ');

numbervar i; 
numbervar total:= 0;
numbervar total2:= 0;
For i := 1 to count(strings) Do
( 
//    If InStr(strings[i], '-') > 0 then 
  //  (
    //    Stringvar Array numdesc := Split(strings[i], '-');
      //  total2 := ToNumber(numdesc[1]);
        total := total + Val(strings[i]);
        //total := total + ToNumber(numdesc[1]);
  //  );
);

total;

答案 1 :(得分:0)

感谢大家的帮助。西瓦几乎没错。出于某种原因,这是有效的。

//create an array of strings by parsing a underscore-delimited string field
Stringvar Array strings := Split({Estim.User_Memo1}, ', ');

numbervar i:=1;
numbervar total:= 0;

For i := 1 to count(strings) Do
( 
If InStr(strings[i], '-') > 0 then 
(
    Stringvar Array numdesc := Split(strings[i], '-');
    total := total + Val(numdesc[1]);
);
);

total;