[jawsscripts] Re: String Segment Count

  • From: "Paul Magill" <magills@xxxxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Wed, 7 Jul 2010 22:39:25 +1000

Hi Mike,

I've joined this a bit late, and have taken a different approach...

see below:

The function StringProperNames, I have ?used for some years now for its 
stated purpose, and I've just tested the proposed FormatNamePrefix function, 
& I think it may suit your needs.



It requires that the first letter of all the names be already upper case, 
and all the rest be lower case, which is what StringProperNames does.



It can handle other prefixes other than"Mc", such as "Mac".

Prefixes such as O'Brien are already handled by StringProperNames.



It does not use stringSegment, but proceeds along the string from left to 
right.

see the test script at the bottom for sample use.



Regards,

Paul from Aust



code begins:



String Function StringProperNames (string InString)

; to convert a string containing names so that the first letter of each name 
is upper case, & the remainder is lower case

VAR

INT Position, INT EndPosition, INT PreviousCharWasLetter,

STRING TempString, STRING CurrentChar

LET InString = StringLower (InString)

LET Position = 1

LET EndPosition = StringLength (Instring)

LET PreviousCharWasLetter = False

LET TempString = " " ;Space ; to prevent numbers being added. is removed 
before return

While (Position <= EndPosition)

LET CurrentChar = SubString (InString, Position, 1)

If (CurrentChar >= "a") && (CurrentChar <= "z") THEN ; current char is a 
letter

IF PreviousCharWasLetter THEN ; this letter is not the first letter of the 
word

LET TempString = TempString + CurrentChar ; remains lower case

ELSE ; this letter is the first letter of the word as the previous char was 
not a letter

LET TempString = TempString + StringUpper (CurrentChar)

ENDIF ; PreviousCharWasLetter

LET PreviousCharWasLetter = True ; set true so next cycle knows this

ELSE ; current character is not a letter

LET TempString = TempString + CurrentChar

LET PreviousCharWasLetter = False

ENDIF; current character is a letter

LET Position = Position + 1

EndWhile ; not at end of string

RETURN (stringChopLeft (TempString, 1))

EndFunction

?

String Function FormatNamePrefix (string InString, string Prefix)

; it is essential that the prefix is in the correct case. example. "Mc"

VAR

INT PrefixLength,

INT CutPoint,

STRING ReturnString

LET PreFixLength = StringLength (Prefix) - 1

; minus 1 is required, so that StringLeft gets no more than up to the end of 
the prefix. see below & in the while loop

LET CutPoint = StringContains (InString, Prefix) + PrefixLength

While (CutPoint > PrefixLength)

; when no more instances of the prefix are found, CutPoint will be the 
length of the prefix

LET ReturnString = ReturnString + StringLeft (InString, CutPoint) + 
StringUpper (SubString (InString, CutPoint + 1, 1))

; copy to ReturnString, the portion of InString up to the end of the first 
found prefix + the uppercase version of the next character

LET InString = stringChopLeft (InString, CutPoint + 1)

; chop from the left of InString, up to and including the character 
following the prefix

LET CutPoint = StringContains (InString, Prefix) + PrefixLength

EndWhile; still finding the prefix

Return (ReturnString + InString) ; InString is remainder of unprocessed 
source string

EndFunction

?

Script TestOnF6 ()

var

string TestString

Let TestString = "MCTAVISH MCBETH MCTOBY-MCINTOCH MCMYER "

let TestString = StringProperNames (TestString)

let TestString = FormatNamePrefix (TestString, "Mc")

CopyToClipboard (TestString)

; McTavish McBeth McToby-McIntoch McMyer
SayString ("done ")

EndScript

?


----- Original Message ----- 
From: "Mike" <mike_sharp@xxxxxxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Tuesday, July 06, 2010 5:39 PM
Subject: [jawsscripts] Re: String Segment Count


Geoff and all.

I tried as suggested and it did not work. Let me explain what I am trying to
achieve and paste the code thus far.
I am capturing names from a screen which need to be formatted in the correct
way. This particular function has to check for names beginning with Mc and
format it in such a way that the name appears like McTavish. My script works
where the string has a blank space between each forename or surname but in
some cases the name may be hyphenated. I need the string segment count to
look for a blank space and a hyphen. Here is my working code so far, maybe
someone can critique what I have done and suggest a way forward.
As always..thanks in advance for the help.

__________�

View the list's information and change your settings at 
http://www.freelists.org/list/jawsscripts

Other related posts: