Forum: Ruby Having isues with capitalizing words

Posted by JD KF (joepoe)
on 2012-12-06 05:02
So, this is a method I have made:

def  title(words)
    words.gsub(/(\A|\s)\w/) do |word|
      if(word!="and" || word!="an" || word!="the")
          word.upcase
      else
        word.downcase
      end
    end
end

I have been trying to solve this for the longest time and I can't figure
it out.

All I want the method to do is take in a string and capitalize every
word except for "and" and "an" and "the".

The above will not do it and I really don't understand why.  I have
tried a million versions of it as well.

Can someone help me get in the right direction with this?
Posted by Sam Duncan (Guest)
on 2012-12-06 05:10
(Received via mailing list)
On 12/06/2012 05:02 PM, JD KF wrote:
> end
> Can someone help me get in the right direction with this?
Does this help?

 > irb
1.9.3p125 :001 > word = 'and'
  => "and"
1.9.3p125 :002 > word!="and" || word!="an" || word!="the"
  => true


Sam
Posted by Matthew Kerwin (mattyk)
on 2012-12-06 05:11
(Received via mailing list)
Try using "and"s instead of "or"s.


On 6 December 2012 14:02, JD KF <lists@ruby-forum.com> wrote:

> end
> Can someone help me get in the right direction with this?
>
> --
> Posted via http://www.ruby-forum.com/.
>
>


--
  Matthew Kerwin, B.Sc (CompSci) (Hons)
  http://matthew.kerwin.net.au/
  ABN: 59-013-727-651

  "You'll never find a programming language that frees
  you from the burden of clarifying your ideas." - xkcd
Posted by Sagy Drucker (Guest)
on 2012-12-06 06:59
(Received via mailing list)
Your code wont work even after replacing or with ands:

Firstly, dont use || for or. Simply use or command.

Secondly, the capture group you defined (\A|\s) will catch only the
*first*letter. Hence it will never be and , an or the. Maybe
just a or t.



This will work:



*words.gsub!(/\w+/)do |match|*

*   (match=="and" or match=="an" or match=="the") ? match : 
match.capitalize
*

*end*



Enjoy

Sagy



*From:* phluid61@gmail.com [mailto:phluid61@gmail.com] *On Behalf Of 
*Matthew
Kerwin
*Sent:* Thursday, December 06, 2012 6:11 AM
*To:* ruby-talk ML
*Subject:* Re: Having isues with capitalizing words



Try using "and"s instead of "or"s.



On 6 December 2012 14:02, JD KF <lists@ruby-forum.com> wrote:

So, this is a method I have made:

def  title(words)
    words.gsub(/(\A|\s)\w/) do |word|
  if(word!="and" || word!="an" || word!="the")
      word.upcase
  else
      word.downcase
  end
    end
end

I have been trying to solve this for the longest time and I can't figure
it out.

All I want the method to do is take in a string and capitalize every
word except for "and" and "an" and "the".

The above will not do it and I really don't understand why.  I have
tried a million versions of it as well.

Can someone help me get in the right direction with this?

--
Posted via http://www.ruby-forum.com/.





--
  Matthew Kerwin, B.Sc (CompSci) (Hons)
  http://matthew.kerwin.net.au/
  ABN: 59-013-727-651

  "You'll never find a programming language that frees
  you from the burden of clarifying your ideas." - xkcd
Posted by tamouse mailing lists (Guest)
on 2012-12-06 07:39
(Received via mailing list)
On Wed, Dec 5, 2012 at 10:10 PM, Matthew Kerwin <matthew@kerwin.net.au> 
wrote:
>>       word.upcase
>> word except for "and" and "an" and "the".
>
>
> --
>   Matthew Kerwin, B.Sc (CompSci) (Hons)
>   http://matthew.kerwin.net.au/
>   ABN: 59-013-727-651
>
>   "You'll never find a programming language that frees
>   you from the burden of clarifying your ideas." - xkcd

or...


1.9.3-p194 :062 > phrase="the quick brown fox or a rabbit in the hen 
house"
 => "the quick brown fox or a rabbit in the hen house"
1.9.3-p194 :064 > title=phrase.split.each{|w| unless %{and or a
the}.include?(w) then w[0]=w[0].upcase end; w}.join(" ")
 => "the Quick Brown Fox or a Rabbit In the Hen House"
1.9.3-p194 :065 > title[0]=title[0].upcase
 => "T"
1.9.3-p194 :066 > title
 => "The Quick Brown Fox or a Rabbit In the Hen House"
Posted by tamouse mailing lists (Guest)
on 2012-12-06 09:04
(Received via mailing list)
On Thu, Dec 6, 2012 at 12:39 AM, tamouse mailing lists
<tamouse.lists@gmail.com> wrote:
>>>   if(word!="and" || word!="an" || word!="the")
>>> All I want the method to do is take in a string and capitalize every
>>
> or...
>  => "The Quick Brown Fox or a Rabbit In the Hen House"
>

Combine sagy's and mine:

words.gsub!(/\w+/)do |match|
   %w{and or a an the of}.includes?(match) ? match : match.capitalize
end

(or just use gsub without the ! if you want to work on a copy instead
of original)
Posted by JD KF (joepoe)
on 2012-12-06 20:52
Basically what sagy and tamouse said helped me solve this.  Thanks for 
the help
everyone :).
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.