Forum: Ruby on Rails uncut words (string)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ruby O. (Guest)
on 2009-05-27 11:15
I have this paragraph as one srting , apllied below code as suggested by
one of the member.

words = "Kid games need to be both fun and educational. Aimed at ages
 pre-K through middle school, safe environment to discover their
 abilities and learn new skills with interactive and fun computer
 games. Our games build skills in math, logic, memory, vocabulary,
 alphabet, spelling, geography, computer skills, color identification,
 shape identification and other various problem solving. Our commitment
 to parents, teachers, and kids, is to connect earning and skill
 building with a sense of challenge, fun, and self esteem."

 line_length = 10

 word_arry = words.split(" ")

 text = (0..(words.length / line_length)).inject([]) {|v,num| start =
 num * line_length; v << %Q{<= #{words[(start)...(start +
 line_length)].join(" ")} =>}}

 text.join("\n")

It cuts the string after every 10 characters into like this

<= Kid games need to be both fun and educat =><= ional. Aimed at ages
pre-K through middl =><= e school, safe environment to discover t =><=
heir
abilities and learn new skills with =><=  interactive and fun computer
games. Our =><=  games build skills in math, logic, memo =><= ry,
vocabulary,
alphabet, spelling, geog =><= raphy, computer skills, color identifica
=><= tion,
shape identification and other var =><= ious problem solving. Our
commitment
to  =><= parents, teachers, and kids, is to conne =><= ct earning and
skill
building with a sen =><= se of challenge, fun, and self esteem. =>


What i need is the words remain uncut if it comes in the range like in
first line i want eductaional to be complete if it is not in range than
it wil show upto "and"



any kind of help highly appreciated,its a urgent need.Please provide any
way to it.

Regards & thanks

amit
Julian L. (Guest)
on 2009-05-27 14:59
(Received via mailing list)
Hi.

I think what you want to do is word-wrapping across lines depending on
line length.

Here's a pretty nice algorithm using a regular expression:

class String
def word_wrap(line_length=80)
self.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "\\1\n")
end
end

What this does is put the word_wrap method onto the string class.

So, you can do this:

string_to_wrap = "Kid games need to be both fun and educational. Aimed
at ages pre-K through middle school, safe environment to discover
their abilities and learn new skills with interactive and fun computer
games. Our games build skills in math, logic, memory, vocabulary,
alphabet, spelling, geography, computer skills, color identification,
shape identification and other various problem solving. Our commitment
to parents, teachers, and kids, is to connect earning and skill
building with a sense of challenge, fun, and self esteem."

puts string_to_wrap.wrap

If you want to change the number of characters that it will wrap at
(ie line length), which defaults to 80... then specify it as an
argument:

puts string_to_wrap.wrap(10)

Good luck, and remember that when posting questions to this list, it's
really good to carefully prepare your question.

Julian.

----------------------------------------------
Learn: http://sensei.zenunit.com/
Last updated 20-May-09 (Rails, Basic Unix)
Blog: http://random8.zenunit.com/
Twitter: http://twitter.com/random8r
Ruby O. (Guest)
on 2009-05-27 15:53
Julian L. wrote:
> Hi.
>
> I think what you want to do is word-wrapping across lines depending on
> line length.
>
> Here's a pretty nice algorithm using a regular expression:
>
> class String
> def word_wrap(line_length=80)
> self.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "\\1\n")
> end
> end
>
> What this does is put the word_wrap method onto the string class.
>
> So, you can do this:
>
> string_to_wrap = "Kid games need to be both fun and educational. Aimed
> at ages pre-K through middle school, safe environment to discover
> their abilities and learn new skills with interactive and fun computer
> games. Our games build skills in math, logic, memory, vocabulary,
> alphabet, spelling, geography, computer skills, color identification,
> shape identification and other various problem solving. Our commitment
> to parents, teachers, and kids, is to connect earning and skill
> building with a sense of challenge, fun, and self esteem."
>
> puts string_to_wrap.wrap
>
> If you want to change the number of characters that it will wrap at
> (ie line length), which defaults to 80... then specify it as an
> argument:
>
> puts string_to_wrap.wrap(10)
>
> Good luck, and remember that when posting questions to this list, it's
> really good to carefully prepare your question.
>
> Julian.
>
> ----------------------------------------------
> Learn: http://sensei.zenunit.com/
> Last updated 20-May-09 (Rails, Basic Unix)
> Blog: http://random8.zenunit.com/
> Twitter: http://twitter.com/random8r


Thanks julian for your help almost at the end, little help more.

i used your regular expression

line_length = 40
    words = "Kid games need to be both fun and educational. Aimed at
ages
pre-K through middle school, safe environment to discover their
abilities and learn new skills with interactive and fun computer
games. Our games build skills in math, logic, memory, vocabulary,
alphabet, spelling, geography, computer skills, color identification,
shape identification and other various problem solving. Our commitment
to parents, teachers, and kids, is to connect earning and skill
building with a sense of challenge, fun, and self esteem."

words = words.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "<=\\1\n")
words = words.sub('<=', '')
abort words

output

Kid games need to be both fun and
<=educational. Aimed at ages
<=pre-K through middle school, safe
<=environment to discover their
<=abilities and learn new skills with
<=interactive and fun computer
<=games. Our games build skills in math,
<=logic, memory, vocabulary,
<=alphabet, spelling, geography, computer
<=skills, color identification,
<=shape identification and other various
<=problem solving. Our commitment
<=to parents, teachers, and kids, is to
<=connect earning and skill
<=building with a sense of challenge, fun,
<=and self esteem.

need to append "=>" at end of each line to like in startin.

waiting for you last help

Regards
Arunkumar B. (Guest)
on 2009-05-27 16:00
(Received via mailing list)
words = "Kid games need to be both fun and educational. Aimed at ages
pre-K through middle school, safe environment to discover their
abilities and learn new skills with interactive and fun computer
games. Our games build skills in math, logic, memory, vocabulary,
alphabet, spelling, geography, computer skills, color identification,
shape identification and other various problem solving. Our commitment
to parents, teachers, and kids, is to connect earning and skill
building with a sense of challenge, fun, and self esteem."

word_arry = words.split(" ")

count=0
line_text="<="
word_arry.each {|word|
count+=word.length
if count > 40
count=0
line_text+="=>\n<="+word+" "
else
end_txt = (count > 38) ? word : word+" "
line_text+=end_txt
end
}
line_text+="=>"

puts line_text

On Wed, May 27, 2009 at 5:23 PM, Ruby O.
<removed_email_address@domain.invalid>wrote:

> > def word_wrap(line_length=80)
> > their abilities and learn new skills with interactive and fun computer
> > argument:
> > Last updated 20-May-09 (Rails, Basic Unix)
> ages
> abort words
> <=logic, memory, vocabulary,
>
> waiting for you last help
>
> Regards
> --
> Posted via http://www.ruby-forum.com/.
>
> >
>


--
With regards,
Arunkumar B.
9789980534.
http://thinkingrails.blogspot.com
Julian L. (Guest)
on 2009-05-27 16:11
(Received via mailing list)
On 27/05/2009, at 9:59 PM, Arunkumar B wrote:

> end
> }
> line_text+="=>"
>
> puts line_text
>

This goes to show very easily that you can write really bad code in
any language.

You have a beautiful set of iterators and other idiomatic ruby
available to you. Why on earth would you denigrate ruby to working
like a procedural language?

Julian.

----------------------------------------------
Learn: http://sensei.zenunit.com/
Last updated 20-May-09 (Rails, Basic Unix)
Blog: http://random8.zenunit.com/
Twitter: http://twitter.com/random8r
Julian L. (Guest)
on 2009-05-27 16:15
(Received via mailing list)
On 27/05/2009, at 9:53 PM, Ruby O. wrote:
> games. Our games build skills in math, logic, memory, vocabulary,
> alphabet, spelling, geography, computer skills, color identification,
> shape identification and other various problem solving. Our commitment
> to parents, teachers, and kids, is to connect earning and skill
> building with a sense of challenge, fun, and self esteem."
>
> words = words.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "<=\\1\n")
> words = words.sub('<=', '')
> abort words
>

Hi.

Is it really too much work for you to work out what you need to do?


class String
def word_wrap(line_length=80)
self.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "<=\\1=>\n")
end
end

Perhaps you should join http://sensei.zenunit.com/

Julian.

----------------------------------------------
Learn: http://sensei.zenunit.com/
Last updated 20-May-09 (Rails, Basic Unix)
Blog: http://random8.zenunit.com/
Twitter: http://twitter.com/random8r
Ruby O. (Guest)
on 2009-05-27 16:47
Julian L. wrote:
> On 27/05/2009, at 9:53 PM, Ruby O. wrote:
>> games. Our games build skills in math, logic, memory, vocabulary,
>> alphabet, spelling, geography, computer skills, color identification,
>> shape identification and other various problem solving. Our commitment
>> to parents, teachers, and kids, is to connect earning and skill
>> building with a sense of challenge, fun, and self esteem."
>>
>> words = words.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "<=\\1\n")
>> words = words.sub('<=', '')
>> abort words
>>
>
> Hi.
>
> Is it really too much work for you to work out what you need to do?
>
>
> class String
> def word_wrap(line_length=80)
> self.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "<=\\1=>\n")
> end
> end
>
> Perhaps you should join http://sensei.zenunit.com/
>
> Julian.
>
> ----------------------------------------------
> Learn: http://sensei.zenunit.com/
> Last updated 20-May-09 (Rails, Basic Unix)
> Blog: http://random8.zenunit.com/
> Twitter: http://twitter.com/random8r


Great it worked for me !!

is there any solution to traverse a string character by charcater in
ruby on rails.

Regards

amit
Colin L. (Guest)
on 2009-05-27 17:32
(Received via mailing list)
2009/5/27 Ruby O. <removed_email_address@domain.invalid>

> >> words = words.sub('<=', '')
> > self.gsub(/(.{1,#{line_length}})(\s+|\Z)/, "<=\\1=>\n")
> > Blog: http://random8.zenunit.com/
> > Twitter: http://twitter.com/random8r
>
>
> Great it worked for me !!
>
> is there any solution to traverse a string character by charcater in
> ruby on rails.
>

Have you tried looking through the documentation for the String class?
See
http://www.ruby-doc.org/core/classes/String.html

Colin
mike (Guest)
on 2009-05-28 02:07
(Received via mailing list)
Split your string to words like described. Then create an empty array
of lines and an empty temporary string. Loop over your words. In the
loop, pop a word off the words array and append it to the temp.
String. Check for the length of it. If it is more than line_length
push the temp. String to the lines array and break the loop, else do
nothing. Repeat this until your words array is empty (this means
another loop around the described one).

While this is not as elegant as the solution posted before, it might
be understandable by a novice programmer.

2009/5/27, Ruby O. <removed_email_address@domain.invalid>:
>  to parents, teachers, and kids, is to connect earning and skill
>  text.join("\n")
> =><= tion,
>
>
> >
>

--
Von meinen Mobilger├Ąt aus gesendet
This topic is locked and can not be replied to.