2013-10-10 111 views
1

Progress 4GL是否具有測試字符串是否爲數字的函數,如PHP的is_numeric($ foo)函數?如何使用Progress 4GL測試字符串是否數字

我見過http://knowledgebase.progress.com/articles/Article/P148549的函數示例來測試一個字符串中的字符是否是數字。看起來它有一個錯字,順便說一句。

但我認爲該語言將是一個內置函數。

+0

如果你有一個基於Windows的安裝進度你可能有幫助可用。這是「?」程序組中的圖標關閉開始菜單。最好的部分是參考手冊。通過它來查找語言中是否存在函數非常容易 - 或者您可以滾動查看目錄,看看是否有任何內容吸引您的目光。這是瞭解你不知道的事情的好方法。 –

回答

1

不需要的功能可以僅僅指剛做直轉換。

ASSIGN dNumber = DECIMAL(cNumber) NO-ERROR. 
IF ERROR-STATUS:ERROR THEN 
DO: 
    {Handle issues}   
END. 

或者如果它總是整數可以使用INTEGER而不是DECIMAL。

+1

當然你不需要*一個功能 - 但她確實要求一個。 –

+0

是真的,但她要求一個內置函數;) – AquaAlex

4

該語言沒有內置的「isNum()」類型的函數。

到kbase方法另一種方法是:

function isNum returns logical (input s as character): 
    define variable n as decimal no-undo. 
    assign 
    n = decimal(s) 
    no-error 
    . 
    return (error-status:num-messages = 0). 
end. 

display isNum("123") isNum("xyz"). 
1

該代碼處理任何數字字符串 - 即使使用的字符比最大小數長度等

FUNCTION isNumeric RETURNS LOGICAL (textvalue AS CHAR): 
    DEF VAR i AS INT NO-UNDO. 

    IF textvalue = ? THEN RETURN TRUE. 

    DO i = 1 TO (LENGTH(textvalue) - 1): 
     INT(SUBSTRING(textvalue, i, (i + 1))) NO-ERROR. 
     IF ERROR-STATUS:ERROR THEN RETURN FALSE. 
    END. 

    RETURN TRUE. 
END FUNCTION. 
2

我自己最近在看這更長的時間。批准的答案在100%的情況下不起作用。

如果用戶輸入以下任何特殊字符串:? * - 或者+答案不起作用。
單個加號或減號(破折號)將轉換爲0,您可能不想要。
單個問號字符是有效值,該進度將進度識別爲未知值,在此值處您可能不再需要。
單個或組星號本身也會轉換爲0.
如果您運行以下代碼,您將會看到我的意思。

DISP DECIMAL("*") 
    DECIMAL("**") 
    DECIMAL("?") 
    DECIMAL("+") 
    DECIMAL("-"). 

以下額外的代碼也許有用來解決這個問題

DEFINE VARIABLE iZeroCode AS INTEGER NO-UNDO. 
DEFINE VARIABLE iNineCode AS INTEGER NO-UNDO. 
DEFINE VARIABLE chChar  AS CHARACTER NO-UNDO. 

ASSIGN iZeroCode = ASC("0") 
     iNineCode = ASC("9") 
     chChar = SUBSTRING(cNumber,1,1).       

IF NOT(ASC(chChar) >= iZeroCode AND ASC(chChar) <= iNineCode) THEN DO: 
    MESSAGE "Invalid Number..." VIEW-AS ALERT-BOX. 
END. 
相關問題