[futurebasic] Re: [FB] String Manipulation

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : April 2004 : Group Archive : Group : All Groups

From: Alain Pastor <apastor@...>
Date: Thu, 01 Apr 2004 09:44:40 +0200
My attempt:

Clear Local Mode
Local FN MakeName$(incoming As Str255)
Dim As short p
Dim As Long  i
Dim As Str63 first, last, myStr
Dim As Boolean upper

// all in lower case
LowerCaseText( @incoming[1], incoming[0], _smCurrentScript )
// find coma
p = Instr(0,incoming,",")
Long If p
// split in two strings if found
last  = Left$(incoming,p-1)
first = Right$(incoming,incoming[0]-p)
Xelse
// a single string to deal with
first = incoming
End If
// handle first string if any (length byte <>0)
Long If first[0]
// copy in temp string
myStr = first
Gosub "make name"
// store the result back in original string
first = myStr
End If
// handle last string if any
Long If last[0]
// copy into temp string
myStr = last
Gosub "make name"
// store the result back in original string
last = myStr
End If
// concatenation of the two parts
Long If first[0]
// if first string is not nul copy it in resulting string
myStr = first
Xelse
// else resulting string is empty
myStr[0] = 0
End If
Long If last[0]
Long If myStr[0]
// add a space char before last string
myStr += " " + last
Xelse
// last string is not empty but no first string
myStr = last
End If
End If
// exit fn passing back the resulting string
Exit Fn

"make name"
// check for leading space chars
i = 0
While myStr[i+1] == _" "
i++
Wend
// quick way to remove all leading space chars
If i Then myStr[i] = myStr[0]-i : myStr = Pstr$(@myStr[i])
// exit routine if the resulting string is empty
If myStr[0] == 0 Then Return
// check for trailing space chars
i = 0
While myStr[myStr[0]] == _" "
// reduce string length
myStr[0] --
Wend
// exit routine if the result string is empty
If myStr[0] == 0 Then Return
// handle uppercase chars
upper = _zTrue
For i = 1 To myStr[0]
Long If upper
UpperCaseText(@myStr[i],1,_smCurrentScript)
upper = Not(upper)
End If
// check special chars to switch on uppercasing
Select myStr[i]
Case _" ", _"-",_".",_"'"
upper = Not(upper)
End Select
Next
return

End Fn = myStr



Print FN MakeName$("EVANS, MICHAEL A. W." )
Print FN MakeName$("EVANS,MICHAEL A. W."  )
Print FN MakeName$("FITZGERALD, F. SCOTT")
Print FN MakeName$("FISHER-PRICE, MICHAEL A. W." )
Print FN MakeName$("eVaNS, MICHAEL-fISHER A.W." )
Print FN MakeName$("evans,MiCHAEL-FiSHeR A.W." )
print fn MakeName$( "D'ANGELO, ANTONIO"     )
print fn MakeName$( "evans, michael a. w."  )
Print FN MakeName$( "EVANS, MICHAEL A. W."  )
Print FN MakeName$( "MAC DOUGELL, IAN B."   )
Print FN MakeName$( "TEMPLE-BLACK, SHIRLEY" )
Print FN MakeName$( "o'reilly, bill"        )
Print FN MakeName$( "McDonald, Old Man"     )

Alain