[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

How to repeat string patterns in Ruby?

Just Another Victim of the Ambient Morality

6/19/2007 12:54:00 AM

I have some funky Python code that I'm trying to modify but it's
formatted with spaces instead of tabs, making it impossible to change. Now,
there may be many different ways to solve this problem but the first impulse
I had was to write a small Ruby script to reformat the code.
Now, a certain pattern came up in my solution that I have seen before.
I wanted to do something like this:

num_tabs = num_spaces / tab_width
tabs = num_tabs.collect { "\t" }.join

...but I discovered that there is not collect method in the integer
object. The best I could come up with was:

tabs = ''
num_tabs.times { tabs << "\t" }

Is there a more succinct, more Ruby-esque way to do this?
Thank you...



7 Answers

Michael W. Ryder

6/19/2007 1:04:00 AM

0

Just Another Victim of the Ambient Morality wrote:
> I have some funky Python code that I'm trying to modify but it's
> formatted with spaces instead of tabs, making it impossible to change. Now,
> there may be many different ways to solve this problem but the first impulse
> I had was to write a small Ruby script to reformat the code.
> Now, a certain pattern came up in my solution that I have seen before.
> I wanted to do something like this:
>
> num_tabs = num_spaces / tab_width
> tabs = num_tabs.collect { "\t" }.join
>
> ...but I discovered that there is not collect method in the integer
> object. The best I could come up with was:
>
> tabs = ''
> num_tabs.times { tabs << "\t" }
>
> Is there a more succinct, more Ruby-esque way to do this?
> Thank you...
>
>
>
Couldn't you just use something like b = a.gsub(" ", "\t") where the
number of spaces is your tab size? This would avoid having count the
spaces.

Mark Day

6/19/2007 1:04:00 AM

0

On Jun 18, 2007, at 5:55 PM, Just Another Victim of the Ambient
Morality wrote:

> tabs = ''
> num_tabs.times { tabs << "\t" }
>
> Is there a more succinct, more Ruby-esque way to do this?

"\t" * num_tabs

-Mark


Just Another Victim of the Ambient Morality

6/19/2007 2:21:00 AM

0


"Mark Day" <mday@mac.com> wrote in message
news:62A0BA82-71DA-46D2-979C-A40B58B5A4CD@mac.com...
> On Jun 18, 2007, at 5:55 PM, Just Another Victim of the Ambient Morality
> wrote:
>
>> tabs = ''
>> num_tabs.times { tabs << "\t" }
>>
>> Is there a more succinct, more Ruby-esque way to do this?
>
> "\t" * num_tabs

Thank you, this is exactly what I am looking for!



Just Another Victim of the Ambient Morality

6/19/2007 2:26:00 AM

0


"Michael W. Ryder" <_mwryder@worldnet.att.net> wrote in message
news:NXFdi.99294$Sa4.77366@bgtnsc05-news.ops.worldnet.att.net...
> Just Another Victim of the Ambient Morality wrote:
>> I have some funky Python code that I'm trying to modify but it's
>> formatted with spaces instead of tabs, making it impossible to change.
>> Now, there may be many different ways to solve this problem but the first
>> impulse I had was to write a small Ruby script to reformat the code.
>> Now, a certain pattern came up in my solution that I have seen
>> before. I wanted to do something like this:
>>
>> num_tabs = num_spaces / tab_width
>> tabs = num_tabs.collect { "\t" }.join
>>
>> ...but I discovered that there is not collect method in the integer
>> object. The best I could come up with was:
>>
>> tabs = ''
>> num_tabs.times { tabs << "\t" }
>>
>> Is there a more succinct, more Ruby-esque way to do this?
>> Thank you...
>>
>>
>>
> Couldn't you just use something like b = a.gsub(" ", "\t") where the
> number of spaces is your tab size? This would avoid having count the
> spaces.

This is a good idea. Unfortunately for me, the actual code is more
complicated than what I posted. I simplified it to emphasize the particular
problem I wanted to solve.
The real program deals with issues where, say, one line has four spaces
while the next line has seven instead of a reasonable eight...


Robert Klemme

6/19/2007 7:50:00 AM

0

On 19.06.2007 02:53, Just Another Victim of the Ambient Morality wrote:
> I have some funky Python code that I'm trying to modify but it's
> formatted with spaces instead of tabs, making it impossible to change. Now,
> there may be many different ways to solve this problem but the first impulse
> I had was to write a small Ruby script to reformat the code.
> Now, a certain pattern came up in my solution that I have seen before.
> I wanted to do something like this:
>
> num_tabs = num_spaces / tab_width
> tabs = num_tabs.collect { "\t" }.join
>
> ...but I discovered that there is not collect method in the integer
> object. The best I could come up with was:
>
> tabs = ''
> num_tabs.times { tabs << "\t" }
>
> Is there a more succinct, more Ruby-esque way to do this?
> Thank you...

$ expand --help
Usage: expand [OPTION]... [FILE]...
Convert tabs in each FILE to spaces, writing to standard output.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
-i, --initial do not convert tabs after non blanks
-t, --tabs=NUMBER have tabs NUMBER characters apart, not 8
-t, --tabs=LIST use comma separated list of explicit tab positions
--help display this help and exit
--version output version information and exit

Report bugs to <bug-coreutils@gnu.org>.

:-)

robert

Jano Svitok

6/20/2007 8:28:00 PM

0

On 6/19/07, Robert Klemme <shortcutter@googlemail.com> wrote:
> On 19.06.2007 02:53, Just Another Victim of the Ambient Morality wrote:
> > I have some funky Python code that I'm trying to modify but it's
> > formatted with spaces instead of tabs, making it impossible to change. Now,
> > there may be many different ways to solve this problem but the first impulse
> > I had was to write a small Ruby script to reformat the code.
> > Now, a certain pattern came up in my solution that I have seen before.
> > I wanted to do something like this:
> >
> > num_tabs = num_spaces / tab_width
> > tabs = num_tabs.collect { "\t" }.join
> >
> > ...but I discovered that there is not collect method in the integer
> > object. The best I could come up with was:
> >
> > tabs = ''
> > num_tabs.times { tabs << "\t" }
> >
> > Is there a more succinct, more Ruby-esque way to do this?
> > Thank you...
>
> $ expand --help
> Usage: expand [OPTION]... [FILE]...
> Convert tabs in each FILE to spaces, writing to standard output.
> With no FILE, or when FILE is -, read standard input.
>
> Mandatory arguments to long options are mandatory for short options too.
> -i, --initial do not convert tabs after non blanks
> -t, --tabs=NUMBER have tabs NUMBER characters apart, not 8
> -t, --tabs=LIST use comma separated list of explicit tab positions
> --help display this help and exit
> --version output version information and exit
>
> Report bugs to <bug-coreutils@gnu.org>.
>
> :-)

Maybe this one would be better:

unexpand --help
Usage: unexpand [OPTION]... [FILE]...
Convert blanks in each FILE to tabs, writing to standard output.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
-a, --all convert all blanks, instead of just initial blanks
--first-only convert only leading sequences of blanks (overrides -a)
-t, --tabs=N have tabs N characters apart instead of 8 (enables -a)
-t, --tabs=LIST use comma separated LIST of tab positions (enables -a)
--help display this help and exit
--version output version information and exit

Report bugs to <bug-coreutils@gnu.org>.

:)

Just Another Victim of the Ambient Morality

7/11/2007 6:21:00 PM

0


"Jano Svitok" <jan.svitok@gmail.com> wrote in message
news:8d9b3d920706201328s697fbbaoe1c5e52cab21b9b1@mail.gmail.com...
> On 6/19/07, Robert Klemme <shortcutter@googlemail.com> wrote:
>> On 19.06.2007 02:53, Just Another Victim of the Ambient Morality wrote:
>> > I have some funky Python code that I'm trying to modify but it's
>> > formatted with spaces instead of tabs, making it impossible to change.
>> > Now,
>> > there may be many different ways to solve this problem but the first
>> > impulse
>> > I had was to write a small Ruby script to reformat the code.
>> > Now, a certain pattern came up in my solution that I have seen
>> > before.
>> > I wanted to do something like this:
>> >
>> > num_tabs = num_spaces / tab_width
>> > tabs = num_tabs.collect { "\t" }.join
>> >
>> > ...but I discovered that there is not collect method in the integer
>> > object. The best I could come up with was:
>> >
>> > tabs = ''
>> > num_tabs.times { tabs << "\t" }
>> >
>> > Is there a more succinct, more Ruby-esque way to do this?
>> > Thank you...
>>
>> $ expand --help
>> Usage: expand [OPTION]... [FILE]...
>> Convert tabs in each FILE to spaces, writing to standard output.
>> With no FILE, or when FILE is -, read standard input.
>>
>> Mandatory arguments to long options are mandatory for short options too.
>> -i, --initial do not convert tabs after non blanks
>> -t, --tabs=NUMBER have tabs NUMBER characters apart, not 8
>> -t, --tabs=LIST use comma separated list of explicit tab positions
>> --help display this help and exit
>> --version output version information and exit
>>
>> Report bugs to <bug-coreutils@gnu.org>.
>>
>> :-)
>
> Maybe this one would be better:
>
> unexpand --help
> Usage: unexpand [OPTION]... [FILE]...
> Convert blanks in each FILE to tabs, writing to standard output.
> With no FILE, or when FILE is -, read standard input.
>
> Mandatory arguments to long options are mandatory for short options too.
> -a, --all convert all blanks, instead of just initial blanks
> --first-only convert only leading sequences of blanks (overrides -a)
> -t, --tabs=N have tabs N characters apart instead of 8 (enables -a)
> -t, --tabs=LIST use comma separated LIST of tab positions (enables -a)
> --help display this help and exit
> --version output version information and exit
>
> Report bugs to <bug-coreutils@gnu.org>.
>
> :)

All useful information, thank you...