【发布时间】:2015-05-29 20:43:28
【问题描述】:
我从事编码工作 15 年,了解多种语言,C#、C++、PHP、PAWN、SMALL、ETC 等。 Crystal 语法可能是我见过的最不一致和最荒谬的语法。
无论如何,我在这里尝试做一些简单的事情。我的数据库中有一个格式如下的字符串: “1-DESC、2-其他、5-MISC”
'-' 和 ',' 是用于在我的代码中拆分字符串的分隔符。无论如何,我需要添加 1+2+5 以便 CR 报告这些数字的总数。出于某种原因,在下面的代码中,当我应该得到 10 时,我一直得到“30.00”。我无法理解 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”
请原谅我多余的总变量。我一直在尝试寻找解决方法大约一个小时。
感谢您的任何见解。
【问题讨论】:
-
两件小事:首先,你的变量应该声明为
Local。其次,您没有使用赋值运算符初始化total和total2变量,而是使用了相等运算符。尽管如此,当我尝试你的代码时,无论如何我都会得到 10。你绝对确定{Estim.User_Memo1}的价值吗?您是否已将每个变量依次打印出来作为健全性检查? (您可以使用Join()打印数组。) -
Crystal 语法不一致且荒谬。这就是为什么我将这段代码移动到命令或存储过程中,这样我就可以使用 SQL 来解决这样的问题。
标签: loops for-loop crystal-reports integer