[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

strings that contain quote marks

jonsteenbergen@gmail.com

1/24/2008 3:56:00 PM

Sorry if this post is a duplicate, I'm having problems with my posts
posting.

Hello,
I've searched through the Ruby documentation to try and figure this
out - no luck at all, also searched google to see if anyone had
written about this. Any help or direction on where to find the answer
would be much appreciated!

This is in a rails project, but I think the answer lies in Ruby's
string methods.
I've got an object that has a list of materials attached to it, so in
my model I grab all the materials and convert them into a string -
like this:

self.materials.collect{ |x| x.material.strip.humanize.split.map{ |w|
w.capitalize}.join(' ')}.join(', ')

So I break apart each material by word, capitalize it, put that
material string back together and then join all the materials by
commas.

This works great, except that some of the materials are books with the
titles surrounded by quotes -
Book "the Snowy Day," By Ezra Jack Keats

So my code above works, except for the first letter after the initial
"
Is there a method to deal with this, so that it correctly capitalizes
the first letter after the " if there is a quote? I've tried a lot of
different things, but nothing is giving me the results I need.

Anyone have any ideas?
Thanks!
3 Answers

Alex LeDonne

1/24/2008 4:28:00 PM

0

On Jan 24, 2008 10:59 AM, jonsteenbergen@gmail.com
<jonsteenbergen@gmail.com> wrote:
> Sorry if this post is a duplicate, I'm having problems with my posts
> posting.
>
> Hello,
> I've searched through the Ruby documentation to try and figure this
> out - no luck at all, also searched google to see if anyone had
> written about this. Any help or direction on where to find the answer
> would be much appreciated!
>
> This is in a rails project, but I think the answer lies in Ruby's
> string methods.
> I've got an object that has a list of materials attached to it, so in
> my model I grab all the materials and convert them into a string -
> like this:
>
> self.materials.collect{ |x| x.material.strip.humanize.split.map{ |w|
> w.capitalize}.join(' ')}.join(', ')
>
> So I break apart each material by word, capitalize it, put that
> material string back together and then join all the materials by
> commas.
>
> This works great, except that some of the materials are books with the
> titles surrounded by quotes -
> Book "the Snowy Day," By Ezra Jack Keats
>
> So my code above works, except for the first letter after the initial
> "
> Is there a method to deal with this, so that it correctly capitalizes
> the first letter after the " if there is a quote? I've tried a lot of
> different things, but nothing is giving me the results I need.
>
> Anyone have any ideas?
> Thanks!
>

Try changing split to split(/\b/), then change join(' ') to just join:

irb(main):001:0> material = 'Book "the Snowy Day," By Ezra Jack Keats'
=> "Book \"the Snowy Day,\" By Ezra Jack Keats"

irb(main):002:0> material.strip.split.map{ |w| w.capitalize }.join(' ')
=> "Book \"the Snowy Day,\" By Ezra Jack Keats"

irb(main):003:0> material.strip.split(/\b/).map{ |w| w.capitalize }.join
=> "Book \"The Snowy Day,\" By Ezra Jack Keats"


The split on /\b/ splits on word boundaries, preserving all the spaces
and punctuation between. That's why the join no longer needs spaces:

irb(main):004:0> material.strip.split(/\b/)
=> ["Book", " \"", "the", " ", "Snowy", " ", "Day", ",\" ", "By", " ",
"Ezra", " ", "Jack", " ", "Keats"]


-A

Axel Etzold

1/24/2008 4:30:00 PM

0


-------- Original-Nachricht --------
> Datum: Fri, 25 Jan 2008 00:59:58 +0900
> Von: "jonsteenbergen@gmail.com" <jonsteenbergen@gmail.com>
> An: ruby-talk@ruby-lang.org
> Betreff: strings that contain quote marks

> Sorry if this post is a duplicate, I'm having problems with my posts
> posting.
>
> Hello,
> I've searched through the Ruby documentation to try and figure this
> out - no luck at all, also searched google to see if anyone had
> written about this. Any help or direction on where to find the answer
> would be much appreciated!
>
> This is in a rails project, but I think the answer lies in Ruby's
> string methods.
> I've got an object that has a list of materials attached to it, so in
> my model I grab all the materials and convert them into a string -
> like this:
>
> self.materials.collect{ |x| x.material.strip.humanize.split.map{ |w|
> w.capitalize}.join(' ')}.join(', ')
>
> So I break apart each material by word, capitalize it, put that
> material string back together and then join all the materials by
> commas.
>
> This works great, except that some of the materials are books with the
> titles surrounded by quotes -
> Book "the Snowy Day," By Ezra Jack Keats
>
> So my code above works, except for the first letter after the initial
> "
> Is there a method to deal with this, so that it correctly capitalizes
> the first letter after the " if there is a quote? I've tried a lot of
> different things, but nothing is giving me the results I need.
>
> Anyone have any ideas?
> Thanks!

Dear Jon,

try this:

text='Book "the Snowy Day," By Ezra Jack Keats'
while /\"([a-z])/.match(text)
ref=/\"([a-z])/.match(text)
text.gsub!(ref[0],'"' + ref[1].capitalize)
end
p text

Best regards,

Axel

--
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kann`s mit allen: http://www.gmx.net/de/go/mult...

jonsteenbergen@gmail.com

1/25/2008 7:03:00 PM

0

Thanks for the help Axel and Alex, I ended up finding out that the
inflector method titleize in rails
did everything I needed it to do.