2013-10-10 47 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. 
相关问题