【问题标题】:Replace function not working in Crystal Reports替换功能在 Crystal Reports 中不起作用
【发布时间】:2012-02-10 11:38:25
【问题描述】:

当我向此函数提供字符串 stknummer = "*VU-NR:-93.10xxxxxxxx_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})) + "*"

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

当我将 Replace(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})) + "*"

替换已正确完成。

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

我很好地将所有替换项都放在函数中,但这并不是太优雅....

谢谢

【问题讨论】:

    标签: crystal-reports replace formula


    【解决方案1】:

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

    Replace() 函数正在评估中...但是每次您只用一次替换原始字符串tstnummer 和stknummer 来覆盖变量stk 和tst。当所有 Replaces() 完成后,您只剩下一个没有空格字符的字符串。需要改成这个...

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

    【讨论】:

    • 所以替换块被应用在原始字符串上?但是应该删除 : 字符?我该如何解决这个问题?
    【解决方案2】:

    +1 -- 那是我之前发现的。

    在你的第一个任务中,

    tst := tstnummer;
    

    你给 'tst' 一个值。

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

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

    您正在为“tst”重新分配一个值。每个活动语句都使用 REPLACE() 的结果重新分配“tst”——它作用于“tstnummer”中的值。 'Tstnummer' 永远不会改变。 'Tst' 被重复分配 LAST REPLACE() 的结果

    相反,在您为 'tst' 赋值后,您想用 REPLACE() 的结果重新分配它——在变量 'Tst' 上。每次处理一个活动语句时,都会更新 'tst' 的值,并且 NEXT 活动语句会处理“新的”'tst'。

    这听起来令人困惑,但如果你一步一步走过去,你就会明白。 'Tstnummer' 保持不变

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

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2011-02-13
      相关资源
      最近更新 更多