strings that contain quote marks

J

jonsteenbergen

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!
 
A

Alex LeDonne

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
 
A

Axel Etzold

-------- Original-Nachricht --------
Datum: Fri, 25 Jan 2008 00:59:58 +0900
Von: "(e-mail address removed)" <[email protected]>
An: (e-mail address removed)
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
 
J

jonsteenbergen

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,001
Messages
2,570,255
Members
46,853
Latest member
GeorgiaSta

Latest Threads

Top