[英]loop/logic issues in validating string/character data
我需要查看字符串末尾的字符是 zip 代碼還是 zip+4。 如果此字符串的末尾沒有 zip 或 zip+4,則拒絕此地址。 我不明白為什么當我到達破折號字符“-”(即 asci 45)時,我的 noZip 在這里變成了 TRUE。 我從 fnIsDash function 返回“是”,但此時我離開了循環。
與此問題相關——我想使用正則表達式來查看我的字符串是否為 zip 代碼,它將是“NNNNN-NNNN”或“NNNNN”,其中 N 是任何數字。 但是根據我的研究,我沒有看到功能強大的正則表達式在進行中。 真的嗎?
FUNCTION fnisNumeric RETURNS LOGICAL (INPUT cCharacter AS CHARACTER) FORWARD.
FUNCTION fnisDash RETURNS LOGICAL (INPUT cCharacter AS CHARACTER) FORWARD.
DEFINE VARIABLE location AS CHARACTER NO-UNDO.
DEFINE VARIABLE zipPlus4Temp AS CHARACTER NO-UNDO.
DEFINE VARIABLE noZip AS LOGICAL NO-UNDO.
DEFINE VARIABLE cThisChar AS CHARACTER NO-UNDO.
DEFINE VARIABLE cTemp AS CHARACTER NO-UNDO.
DEFINE VARIABLE iTemp AS INTEGER NO-UNDO.
location = "124 State Road Mechanicsburg PA 17050-3156".
zipPlus4Temp = SUBSTRING (location, length(location) - 9, 10).
MESSAGE "zipPlus4Temp " + zipPlus4Temp VIEW-AS ALERT-BOX.
noZip = FALSE.
DO iTemp = 1 TO LENGTH(zipPlus4Temp):
IF noZip EQ TRUE THEN LEAVE.
cThisChar = SUBSTRING(zipPlus4Temp,iTemp,1).
MESSAGE STRING(iTemp) + " this char " + cThisChar VIEW-AS ALERT-BOX.
IF iTemp GE 1 AND iTemp GE 5 THEN
IF NOT(fnIsNumeric(cThisChar)) THEN noZip = TRUE.
//noZip becomes true here
IF iTemp EQ 6 THEN
IF NOT(fnIsDash(cThisChar)) THEN noZip = TRUE.
IF iTemp GE 7 AND iTemp GE 10 THEN
IF NOT(fnIsNumeric(cThisChar)) THEN noZip = TRUE.
END.
MESSAGE SUBSTITUTE("zipPlus4Temp &1 is &2",zipPlus4Temp, noZip).
FUNCTION fnIsNumeric RETURNS LOGICAL (i_cc as CHARACTER):
RETURN ASC(i_cc) GE 48 AND ASC(i_cc) LE 57.
END FUNCTION.
FUNCTION fnIsDash RETURNS LOGICAL (i_cc as CHARACTER):
MESSAGE SUBSTITUTE("The character being passed is &1",i_cc) VIEW-AS ALERT-BOX.
MESSAGE "the ascii value of the character being passed is " + STRING(ASC(i_cc)) VIEW-AS ALERT-BOX.
RETURN ASC(i_cc) EQ 45.
END FUNCTION.
您的 noZip 變量在破折號檢查之前變為 TRUE。 您的數字 1-5 邏輯有誤。 IF-THEN 語句表示大於或等於 1 且大於或等於 5。它應該小於或等於 5。將行更改為:
IF iTemp GE 1 AND iTemp LE 5 THEN
數字 7-10 檢查相同,但這不會影響 noZip 值。
IF iTemp GE 7 AND iTemp LE 10 THEN
不,Progress 不支持正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.