How to repeat string patterns in Ruby?

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...

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 M. wrote:

...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.

to solve this problem but the first impulse I had was to

tabs = ‘’
num_tabs.times { tabs << “\t” }

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

irb(main):001:0> puts Array.new(5, “a”).join
aaaaa
=> nil
irb(main):002:0>

“Mark Day” [email protected] wrote in message
news:[email protected]

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!

On 19.06.2007 02:53, Just Another Victim of the Ambient M. wrote:

...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 [email protected].

:slight_smile:

robert

“Michael W. Ryder” [email protected] wrote in message
news:[email protected]

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…

On 6/19/07, Robert K. [email protected] wrote:

Usage: expand [OPTION]… [FILE]…
Report bugs to [email protected].

:slight_smile:

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 [email protected].

:slight_smile:

“Jano S.” [email protected] wrote in message
news:[email protected]

I wanted to do something like this:
Is there a more succinct, more Ruby-esque way to do this?
-t, --tabs=LIST use comma separated list of explicit tab positions
Usage: unexpand [OPTION]… [FILE]…

Report bugs to [email protected].

:slight_smile:

All useful information, thank you...