2012-06-13 5 views
0

크리스탈 보고서에 마스킹 한 값을 표시하는 수식을 넣었습니다. 하지만 카드 번호 변수에 'The string is non-numeric'오류가 표시됩니다. 다음은 내 공식 코드입니다.크리스탈 보고서에 '문자열이 숫자가 아닙니다.'오류가 발생했습니다. 수식

StringVar cardno; 
NumberVar current_len; 
NumberVar card_len; 
NumberVar start; 
NumberVar last; 
StringVar ca; 

card_len := ToNumber (Mid ({@lens},1,2)); 
start := ToNumber (Mid ({@lens},3,2)); 
last  := ToNumber (Mid ({@lens},5,2)); 

current_len := Length (Trim (ToText({CA.CA}, 0 ,''))); 

ca := ReplicateString("0",card_len-current_len) + Totext({CA.CA},0,''); 

If card_len > current_len Then 
    If start = 0 Then 
     If last <= 1 Then 
      cardno := Mid(ca, last, card_len)    
     Else 
      cardno := ReplicateString("X",last-start-1) + Mid(ca, last, card_len)   
Else 
    cardno := Mid (ca,1,start) + ReplicateString("X",last-start-1) + Mid(ca, last, card_len); 

이 오류가 발생하지 않도록 해결책을 제공해주십시오. 미리 감사드립니다.

+0

당신이 수과 유사한 내용의 예 원하는 마스크를 게시 할 것인가? – craig

+0

"cardno = XXXXXX1234"처럼 cardno가 필요합니다. – maddy2012

+0

문자열의 길이는 상수입니까? 또는 유효한 길이는 무엇입니까? – craig

답변

0

왜 이런 일을하지 않는다 :

Select Len({table.field}) 

//AmEx 
Case 15: Picture({table.field}, "XXXX XXXXXX XXXXX") 

//Visa 
Case 16: Picture({table.field}, "XXXX XXXX XXXX XXXX") 

Default: {table.field} 

** 편집 **

Replace(Space(Len({table.field})-4), " ", "X") + Right({table.field},4) 
+0

해결책 주셔서 감사하지만 cardno 선언에서 오류가 발생했습니다. – maddy2012

+0

Mid() 함수에 대해 인터넷에서 본 예제는 모두 전달 숫자 만 볼 수 있습니다. 매개 변수로 변수를 전달할 수 없습니까? – maddy2012

+0

@ maddy2011 변수를 사용할 때 _always_가 유효한 값을 가지고 있고 함수가 호출 될 때 null이되지 않는 한 변수를 사용하는 것은 문제가되지 않습니다. 무효 가능성이있는 경우 전달하기 전에 항상 값을 확인하는 것이 좋습니다. – Ryan

관련 문제