Sign in to follow this  
Followers 0
RandomSF

Converting Strings To Title Case

8 posts in this topic

AutoIt has built-in Lower and Upper case functions. Is there an easy way to do Title Case, also known as Initial Caps?

Share this post


Link to post
Share on other sites



Try this:

$foo = "this is some sentence"

MsgBox(4096,"", _StringInitial($foo))
Exit


Func _StringInitial($text)
   Local $i, $temp, $char, $isFirstLetter = 1
   
   For $i = 1 to StringLen($text)
      $char =  StringMid($text, $i, 1)
      If $isFirstLetter And Asc($char) >= 97 And Asc($char) <= 122 Then
         $tmp = $tmp & Chr(Asc($char)-32)
         $isFirstLetter = 0
      ElseIf $char = " " Then
         $isFirstLetter = 1
         $tmp = $tmp & " "
      Else
         $tmp = $tmp & $char
      EndIf
   Next
   Return $tmp
EndFunc


Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig!

Share this post


Link to post
Share on other sites

Do you mean every worse should start with a capital letter, like this:

This Is A Test Sentence.

If so, that's simple. StringSplit using space as a delimiter, If the first character of each elment is an alpha character, Run that through the upper case function and re-build the string.

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

My version of Valik's thought:

$x="If so, that's simple. StringSplit using space as a delimiter, If the first character of each elment is an alpha character, Run that through the upper case function and re-build the string."
MsgBox(1,"",Title($x))



Func Title($_x)
$_y=""
$_title=StringSplit($_x," ")
For $i=1 To $_title[0]
$_y=$_y & " "& StringUpper ( StringLeft($_title[$i],1) ) & StringTrimLeft($_title[$i],1)
Next
Return StringTrimLeft($_y,1)
EndFunc

No need to determine if first letter is a letter or not, StringUpper will only campitalise letters.

Edited by scriptkitty

AutoIt3, the MACGYVER Pocket Knife for computers.

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

does the 'stringsplit' method correctly capitalize "word in quotes"?

My code should, though you might want to make the following change to the ElseIf-clause:

ElseIf $char = " " or $char = @TAB or $char = @LF or $char = @CR Then
Edited by CyberSlug

Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig!

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

Ok here is one to play around with, copy what ever you like into the clipboard, and run this:

It will capitalise pretty well for ya

$x=clipget()
msgbox(1,"",Titlecase($x))

Func Titlecase($_x)
$y=StringLeft($_x,1)
$y1=$y
$out=StringUpper($y)
$_x=StringTrimLeft ($_x,1)

for $i=0 to Stringlen($_x)
$y=StringLeft($_x,1)
if asc($y1)>90 and asc($y1)<97 or(asc($y1)<65 or asc($y1)>122) then
$out=$out&StringUpper($y)
else
$out=$out&$y
endif
$y1=StringLeft($_x,1)
$_x=StringTrimLeft ($_x,1)
next
return $out
EndFunc
Edited by scriptkitty

AutoIt3, the MACGYVER Pocket Knife for computers.

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

Oops, I Forgot You Want Title Case, Not Only Capitalise The First Letter, So Here Ya Go:

$x=clipget()

msgbox(1,"",Titlecase($x))

Func Titlecase($_x)
$y=StringLeft($_x,1)
$y1=$y
$out=StringUpper($y)
$_x=StringTrimLeft ($_x,1)

for $i=0 to Stringlen($_x)
$y=StringLeft($_x,1)
if asc($y1)>90 and asc($y1)<97 or(asc($y1)<65 or asc($y1)>122) then
$out=$out&StringUpper($y)
else
$out=$out&StringLower($y)
endif
$y1=StringLeft($_x,1)
$_x=StringTrimLeft ($_x,1)
next
return $out
EndFunc

example

This could be234tough|to work[out]title_case,so you may#wish to adjust it?

becomes

This Could Be234Tough|To Work[Out]Title_Case,So You May#Wish To Adjust It?

Edited by scriptkitty

AutoIt3, the MACGYVER Pocket Knife for computers.

Share this post


Link to post
Share on other sites

Close enough. I can munge this to my specifics.

Thanks everyone.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0