Using n.times with gsub

GOAL: one-liner substitute of 5 spaces at beginning of a line.

WORKS: gsub(/^/, " ")
FAILS: gsub(/^/, 5.times {putc " "})

-example-
WORKS: $ cat foo.out | ruby -pe ‘gsub(/^/, " ")’
FAILS: $ cat foo.out | ruby -pe ‘gsub(/^/, 5.times{putc " "})’

I’ve tried variations of putc, puts, and print. All fail in different
ways.

thoughts? – dave

On Monday 14 November 2005 09:42 pm, [email protected] wrote:

I’ve tried variations of putc, puts, and print. All fail in different
ways.

cat foo.out | ruby -pe 'gsub(/^/, " " * 5)
cat foo.out | ruby -pe 'gsub(/^/, (1…5).collect { " " }.join }

On 11/15/05, [email protected] [email protected] wrote:

WORKS: $ cat foo.out | ruby -pe ‘gsub(/^/, " ")’
FAILS: $ cat foo.out | ruby -pe ‘gsub(/^/, 5.times{putc " "})’

n.times returns n, so gsub, expecting a string instead of a number,
croaks at that.

I’m not sure if calling output functions inside a substitution is
something you really want to do… wouldn’t something like Jim’s
answer, or even " " * 5 make more sense?

Sam

On Tue, 15 Nov 2005 [email protected] wrote:

I’ve tried variations of putc, puts, and print. All fail in different
ways.

thoughts? – dave

works:

harp:~ > cat a
a
b
c
harp:~ > ruby -pe ’ 5.times{ gsub /^/, 32.chr } ’ < a
a
b
c

simpler:

harp:~ > ruby -pe ’ sub /^/, 32.chr * 5’ < a
a
b
c

cheers.

-a

Hi –

On Tue, 15 Nov 2005, Ara.T.Howard wrote:

b
b
c

Tiny further simplification: s/<// :slight_smile:

David

“asdf”.gsub(/^/," "*5)

Hi,

At Tue, 15 Nov 2005 11:42:17 +0900,
[email protected] wrote in [ruby-talk:165800]:

GOAL: one-liner substitute of 5 spaces at beginning of a line.

ruby -pe ‘print " "’ < foo.out