[Stackoverflow] [Progress OpenEdge ABL] Counting instances of a character in a string

Status
Not open for further replies.
F

Felice

Guest
I need to be able to count the instances of a period in a string. (I need to capture the decimal point in a number, but discard the other periods in the name or title.) I know NUM-ENTRIES essentially counts the number of entries around that character, but I want to do the opposite. My broader problem is to parse a decimal number out of a string, where occasionally the string has other periods in the string.

What syntax can I use to determine the number of periods in this string? See my pretend "NUM-PERIODDS" pretend Progess function below.

Erin L. Halpin (33.333%) Mr. Thomas Q. Smith 66.6%

I have an algorith to take everything in front of the "%" sign, then I process through all the numbers, but if I find a second "." then I need to skip that character. (If there are better ways to do my algorithm, would love suggestions on that, too.)

Code:
//takes in the full joint name and sees if there is a percentage value in it
//then finds whatever is in front of the % sign
IF INDEX (full_name_percentage, "%") GT 0 THEN DO:
        cBeforePercentageStr= 
        SUBSTRING(full_name_percentage,1,INDEX(full_name_percentage,"%") - 1).
        IF LENGTH (cBeforePercentageStr) GT 0 THEN DO:
            //MESSAGE full_name_percentage VIEW-AS ALERT-BOX.
            cThisChar = "".
            DO iTemp = 1 TO LENGTH(cBeforePercentageStr):
                cThisChar = SUBSTRING(cBeforePercentageStr,iTemp,1).
                IF fnIsNumericOrPeriod(cThisChar) THEN 
                   cPercentage = cPercentage + cThisChar.
            END.
            //need to account for if there are two decimal points
            IF **NUM-PERIODS** (cPercentage, ".") GT 1 THEN DO:
               MESSAGE "cPercentage value " + cPercentage VIEW-AS ALERT-BOX.
               cPercentage = SUBSTRING(cPercentage,2,LENGTH(cPercentage)).
            END.
            dPercent = TRUNCAT (DECIMAL(cPercentage),2).
     END.
END.

Continue reading...
 
Status
Not open for further replies.
Top