Progress 4GL是否具有测试字符串是否为数字的函数,如PHP的is_numeric($ foo)函数?
我在http://knowledgebase.progress.com/articles/Article/P148549看到了函数示例来测试字符串中的字符是否为数字。看起来它有一个错字,顺便说一句。
但我认为这种语言将是一种内置函数。
答案 0 :(得分: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 :(得分:3)
不需要功能就可以直接转换。
ASSIGN dNumber = DECIMAL(cNumber) NO-ERROR.
IF ERROR-STATUS:ERROR THEN
DO:
{Handle issues}
END.
或者如果它始终是整数,则可以使用INTEGER而不是DECIMAL。
答案 2 :(得分:3)
我最近在看这个。批准的答案在100%的情况下不起作用。
如果用户输入以下任何特殊字符串字符:? * - 或+答案不起作用。
单个加号或减号(破折号)将转换为0,您可能不需要
单个问号字符是有效值,其中进度识别为您可能不想要的未知值
单个或组星号本身也会转换为0
如果您运行以下代码,您将看到我的意思。
add(_:)
以下附加代码可能有助于解决此问题
DISP DECIMAL("*")
DECIMAL("**")
DECIMAL("?")
DECIMAL("+")
DECIMAL("-").
答案 3 :(得分: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.
答案 4 :(得分:0)
100%的时间可行
FUNCTION is-num RETURNS LOGICAL
(INPUT cString AS CHARACTER):
DEFINE VARIABLE iZeroCode AS INTEGER NO-UNDO.
DEFINE VARIABLE iNineCode AS INTEGER NO-UNDO.
DEFINE VARIABLE cChar AS CHARACTER NO-UNDO.
DEFINE VARIABLE iCount AS INTEGER NO-UNDO.
DO iCount = 1 TO LENGTH(cString):
ASSIGN iZeroCode = ASC("0")
iNineCode = ASC("9")
cChar = SUBSTRING(cString,iCount,1).
IF NOT(ASC(cChar) >= iZeroCode AND ASC(cChar) <= iNineCode) THEN DO:
RETURN FALSE.
END.
END.
RETURN TRUE.
END.