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