Character Search, Mid String

RD_Man

Member
Hello All,

I am looking for a way to search a char for a value anywhere within the Char. Below is my code to search from the beginning but how can I determine if "test" is anywhere in the char?

Thanks in advance

Mike

DEF VAR cValue AS CHAR.
cValue = "This is a test".
IF cValue BEGINS "This" THEN MESSAGE "In There" VIEW-AS ALERT-BOX.
ELSE MESSAGE "NOT in There" VIEW-AS ALERT-BOX.
 

sunilnair

Member
DEF VAR cValue AS CHAR.
DEF VAR lii AS INTEGER NO-UNDO.
cValue = "This is a test".

DO lii = 1 to NUM-ENTRIES(cValue,' '):
IF ENTRY(lii,cValue,' ') = 'test' THEN
MESSAGE 'Test found ' VIEW-AS ALERT-BOX.
END.

the trick is to treat cValue as a space delimited list .... then you can use any of the PROGRESS string manipulators (LOOKUP, INDEX, NUM-ENTRIES, ENTRY) etc etc ....

-cheers
Sunil
 

RD_Man

Member
Thanks All,

I needed a way to find a specific char value within a second char value. Here is what I can up with. Feel free to critique my work as I am still learning.

Mike

/*Pass 2 values, check if second value in first value*/
DEF VAR iMatchFound AS INT NO-UNDO.
PROCEDURE p_CharContainsChar:
DEFINE INPUT PARAMETER cSearchIn AS Character.
DEFINE INPUT PARAMETER cSearchFor AS Character.
DEF VAR cSampledValue AS CHAR NO-UNDO.
DEF VAR iCount AS INTEGER NO-UNDO.
DEF VAR iSearchValLength AS INT NO-UNDO.
DEF VAR iValLength AS INT NO-UNDO.
iValLength = LENGTH(cSearchIn).
iSearchValLength = LENGTH(cSearchFor).
REPEAT.
iCount = iCount + 1.
IF iCount > iValLength THEN LEAVE.
cSampledValue = SUBSTRING(cSearchIn,iCount,iSearchValLength).
IF cSampledValue MATCHES cSearchFor THEN Do:
iMatchFound = 1.
LEAVE.
End.
END.
END PROCEDURE.
Run p_CharContainsChar ("48oz Folgers Mold","folger").
/*If iMatchFound > 0, Value Is In Char*/
MESSAGE iMatchFound VIEW-AS ALERT-BOX.
 

whwar9739

Member
I know that this may be a really simplified example but I think that something like this would work more cleanly.

Code:
def var l-val1 as char no-undo.
def var l-val2 as char no-undo.
l-val1 = "48oz Folgers Mold".
l-val2 = "folger".
IF l-val1 matches "*" + l-val2 + "*"
then
  display l-val1 l-val2 "MATCHES".

Code:
DEF VAR iMatchFound AS INT NO-UNDO.
PROCEDURE p_CharContainsChar:
DEFINE INPUT PARAMETER cSearchIn AS Character.
DEFINE INPUT PARAMETER cSearchFor AS Character.
IF cSearchIn MATCHES "*" + cSearchFor + "*" THEN Do:
iMatchFound = 1.
LEAVE.
End.
END.
END PROCEDURE.
Run p_CharContainsChar ("48oz Folgers Mold","folger").
/*If iMatchFound > 0, Value Is In Char*/
MESSAGE iMatchFound VIEW-AS ALERT-BOX.
 

RD_Man

Member
whwar9739,

Sorry I did not catch on to your first post. I got it now.

That is WAY more efficient.

Thanks and Have a Great Evening,

Mike
 
Top