Progress 4GL是否具有测试字符串是否为数字的函数,如PHP的is_numeric($ foo)函数?如何使用Progress 4GL测试字符串是否数字
我见过http://knowledgebase.progress.com/articles/Article/P148549的函数示例来测试一个字符串中的字符是否是数字。看起来它有一个错字,顺便说一句。
但我认为该语言将是一个内置函数。
Progress 4GL是否具有测试字符串是否为数字的函数,如PHP的is_numeric($ foo)函数?如何使用Progress 4GL测试字符串是否数字
我见过http://knowledgebase.progress.com/articles/Article/P148549的函数示例来测试一个字符串中的字符是否是数字。看起来它有一个错字,顺便说一句。
但我认为该语言将是一个内置函数。
不需要的功能可以仅仅指刚做直转换。
ASSIGN dNumber = DECIMAL(cNumber) NO-ERROR.
IF ERROR-STATUS:ERROR THEN
DO:
{Handle issues}
END.
或者如果它总是整数可以使用INTEGER而不是DECIMAL。
当然你不需要*一个功能 - 但她确实要求一个。 –
是真的,但她要求一个内置函数;) – AquaAlex
该语言没有内置的“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").
该代码处理任何数字字符串 - 即使使用的字符比最大小数长度等
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.
我自己最近在看这更长的时间。批准的答案在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.
如果你有一个基于Windows的安装进度你可能有帮助可用。这是“?”程序组中的图标关闭开始菜单。最好的部分是参考手册。通过它来查找语言中是否存在函数非常容易 - 或者您可以滚动查看目录,看看是否有任何内容吸引您的目光。这是了解你不知道的事情的好方法。 –