Функция замены не работает в Crystal Reports - PullRequest
2 голосов
/ 10 февраля 2012

когда я предоставляю строку 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})) + "*"

В результате замены не выполняются (то есть: is isвсе еще там)

когда я помещаю 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})) + "*"

Замена сделана правильно.

Почему замены не сделаны в первом примере?

Я хорошо вставил все замены в функцию, но это не слишком элегантно ...

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

О, ты будешь злиться из-за этого:)

Функция Replace () оценивается ... но каждый раз, когда вы перезаписываете переменные stk и tst с единственной заменой исходных строк, tstnummer и stknummer. Когда все Replaces () завершены, вы просто остаетесь со строкой без пробела. Нужно изменить на это ...

...
tst := Replace (tst,":" ,"_" );
tst := Replace (tst,"." ,"_" );
tst := Replace (tst,"=" ,"_" );
...
stk := Replace (stk,":" ,"_" );
stk := Replace (stk,"." ,"_" );
0 голосов
/ 15 февраля 2012

+ 1 - Это поймало меня раньше.

В вашем первом назначении,

tst := tstnummer;

Вы даете 'tst' значение.

В вашем первом активном заявлении,

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

Вы повторно присваиваете значение 'tst'. КАЖДЫЙ активный оператор переназначает 'tst' с результатами REPLACE () - который влияет на значение в "tstnummer". Цтнуммер НИКОГДА НЕ ИЗМЕНЯЕТСЯ. 'Tst' повторно присваивается результаты ПОСЛЕДНЕЙ ЗАМЕНЫ ()

Вместо этого, после того, как вы присвоили 'tst' значение, вы хотите переназначить его с результатами REPLACE () - для переменной 'Tst'. Каждый раз, когда обрабатывается активный оператор, значение tst обновляется, а следующий активный оператор обрабатывает «новый» tst.

Звучит странно, но если вы пройдете через это, вы увидите. «Цтнуммер» остается прежним

Далее мы поиграем с REGEX! (шучу).

...