替换Crystal Reports中不起作用的函数



当我向这个函数提供字符串stknummer="*VU-NR:-9310xxxxxxxx_2-12-2011*"时:

whileprintingrecords;
shared stringvar tstnummer;
shared stringvar stknummer;
local stringvar tst;
local stringvar stk;
local stringvar bc;
tst := tstnummer;
stk := stknummer;
//why is this not evaluated?
tst := Replace (tstnummer,":" ,"_" );
tst := Replace (tstnummer,"." ,"_" );
tst := Replace (tstnummer,"=" ,"_" );
tst := Replace (tstnummer,"/" ,"_" );
tst := Replace (tstnummer,"" ,"_" );
tst := Replace (tstnummer,"?" ,"_" );
tst := Replace (tstnummer,"#" ,"_" );
tst := Replace (tstnummer,"." ,"_" );
tst := Replace (tstnummer,"*" ,"_" );
tst := Replace (tstnummer,"|" ,"_" );
tst := Replace (tstnummer,"<" ,"_" );
tst := Replace (tstnummer,">" ,"_" );
tst := Replace (tstnummer," " ,"-" );
//and this neither?
stk := Replace (stknummer,":" ,"_" );
stk := Replace (stknummer,"." ,"_" );
stk := Replace (stknummer,"=" ,"_" );
stk := Replace (stknummer,"/" ,"_" );
stk := Replace (stknummer,"" ,"_" );
stk := Replace (stknummer,"?" ,"_" );
stk := Replace (stknummer,"#" ,"_" );
stk := Replace (stknummer,"." ,"_" );
stk := Replace (stknummer,"*" ,"_" );
stk := Replace (stknummer,"|" ,"_" );
stk := Replace (stknummer,"<" ,"_" );
stk := Replace (stknummer,">" ,"_" );
stk := Replace (stknummer," " ,"-" );

//select file output format
if {?barcode_type} = true
then (if trim(stk) ="" 
     then  
        bc:= "*" + tst + "_" + totext(dateValue({@signdate})) + "*"
     else
        (
        bc:= "*" + stk + "_" + totext(dateValue({@signdate})) + "*");;)
else bc := "*" + tst + "_" + totext(dateValue({@signdate})) + "*"

结果是没有进行替换(即:仍然存在)

当我把替换(stk,":","_")放在底部函数中时,比如:

//select file output format
if {?barcode_type} = true
then (if trim(stk) ="" 
     then  
        bc:= "*" + tst + "_" + totext(dateValue({@signdate})) + "*"
     else
        (
        bc:= "*" + Replace (stk, ":", "_") + "_" + totext(dateValue({@signdate})) + "*");;)
else bc := "*" + tst + "_" + totext(dateValue({@signdate})) + "*"

更换操作正确。

为什么第一个例子中没有进行替换?

我很好地把所有的替代品都放在了功能中,但这并不太优雅。。。。

THanks

哦,你会为这个而生气的:)

正在评估Replace()函数。。。但是,每次只使用原始字符串tstnsummer和stknummer的单个替换来覆盖变量stk和tst时。当所有的Replaces()都完成后,只留下一个没有空格字符的字符串。需要更改为。。。

...
tst := Replace (tst,":" ,"_" );
tst := Replace (tst,"." ,"_" );
tst := Replace (tst,"=" ,"_" );
...
stk := Replace (stk,":" ,"_" );
stk := Replace (stk,"." ,"_" );

+1——这是我以前遇到的。

在你的第一次任务中,

tst := tstnummer;

你给了tst一个值。

在您的第一个活动声明中,

tst := Replace (tstnummer,":" ,"_" );

您正在为"tst"重新赋值。每个活动语句都用REPLACE()的结果重新分配"tst",REPLACE作用于"tstnsummer"中的值。"Tstnsummer"从未改变Tst'被重复分配最后一次替换()的结果

相反,在为"tst"赋值后,您希望使用REPLACE()的结果重新为其赋值——对变量"tst"。每次处理活动语句时,'tst'的值都会更新,NEXT活动语句会处理"新"'tst`。

这听起来很困惑,但如果你仔细一看,你就会明白。"Tstnsummer"保持不变

接下来我们将使用REGEX!(开玩笑)。

最新更新