Search code examples
openedgeprogress-4gl

How can I determine if a character is alpha?


I have a list of phone numbers that sometimes have a person in parenthesis at the end. I need to extract the person's name (and add that as a note in a separate field). Here is an example of the data:

(517)234-6789(Bob)
701-556-2345
(325)663-5977
(215)789-8585
425-557-7745(Pauline)

There is always a () around the person's name, but often there is also a () around the area code, so I can't use the ( as a way to know a name has started. I'd like to create a loop that goes through the phone number string and if it sees alpha characters, builds a string that will be assigned to a variable as the name.

Something like this. I am making up the IS-ALPHA syntax, of course. That is what I am looking for, or something where I don't have to list every letter.

PROCEDURE CreatePhoneNote (INPUT cPhone AS CHARACTER)
    DEFINE VARIABLE cPersonName AS CHARACTER NO-UNDO.
    DEFINE VARIABLE cThisChar AS CHARACTER NO-UNDO.
    DEFINE VARIABLE iCount AS INTEGER NO-UNDO.

    DO iCount 1 TO LENGTH(cPhone):
        cThisChar = SUBSTRING(cPhone,iCount,1).
        IF IS_ALPHA(cThisChar) THEN cPersonName = cPersonName + cThisChar.
    END.
    
    //etc.....
   
END PROCEDURE.


Solution

  • Since these are the fun questions, just one more isAlpha answer that does not use hard-coded ASCII codes but leans on the property / assumption that an alpha character has an upper and lower case version:

    function isAlpha returns logical (
       i_cc as char
    ):
    
        return compare( upper( i_cc ), '<>', lower( i_cc ), 'case-sensitive' ).
      
    end function.  
    

    With some code to test the function:

    // test
    def var ic as int.
    
    do ic = 0 to 255:
       if isAlpha( chr(ic) ) then
          message ic chr( ic ).
    end.
    

    And then you see that the hard-coded ASCII answer did not take characters with diacritics into account. :-)

    Watch it run on ProgressAblDojo.

    Watch it run again on ProgresAblDojo with a fix to help ProgressAblDojo over it's ignorance of it's own codepage.