我已经编写了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"
请原谅我的冗余总变量。我一直试图找到大约一个小时的解决方法。
感谢您的任何见解。
答案 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;