Printf inside a string


#1

Hi,
This is a pretty simple question. I need to do a “printf” of some
numbers inside a string. I just can’t figure out how to express a long
string that has that “printf” inside it, because the printf statement
itself has quotes, too. I just need the number to end up being
zero-padded to 3 characters. So, for “3,” I want “003.”

number = “3”

puts “stuff, printf “%.3d\n”, #{number}”
…compile error…

Thanks,
Peter


#2

On Mar 1, 2007, at 9:39 AM, Peter B. wrote:

Hi,
This is a pretty simple question. I need to do a “printf” of some
numbers inside a string. I just can’t figure out how to express a long
string that has that “printf” inside it, because the printf statement
itself has quotes, too. I just need the number to end up being
zero-padded to 3 characters. So, for “3,” I want “003.”

number = “3”

puts “stuff, printf “%.3d\n”, #{number}”

printf “stuff, %.3d\n”, number
stuff, 003
=> nil

Hope that helps.

James Edward G. II


#3

On Fri, 2 Mar 2007, James Edward G. II wrote:

puts “stuff, printf “%.3d\n”, #{number}”

printf “stuff, %.3d\n”, number
stuff, 003
=> nil

Hope that helps.

alternatively

puts “stuff, #{ ‘%.3d’ % number }”

-a


#4

On Fri, Mar 02, 2007 at 12:39:13AM +0900, Peter B. wrote:

This is a pretty simple question. I need to do a “printf” of some
numbers inside a string. I just can’t figure out how to express a long
string that has that “printf” inside it, because the printf statement
itself has quotes, too.

I think what you were trying to do is:

number = “3”
puts “stuff, #{sprintf “%.3d”, number}”

Note that sprintf(…) is like printf(…) but returns the result as a
string
value, rather than sending it to stdout. Then #{} lets you insert an
arbitary expression inside another string.

But as pointed out by others, you can do this in one go as

printf “stuff, %.3d\n”, number

HTH,

Brian.


#5

Peter B. wrote:

Hi,
This is a pretty simple question. I need to do a “printf” of some
numbers inside a string. I just can’t figure out how to express a long
string that has that “printf” inside it, because the printf statement
itself has quotes, too. I just need the number to end up being
zero-padded to 3 characters. So, for “3,” I want “003.”

number = “3”

puts “stuff, printf “%.3d\n”, #{number}”
…compile error…

Thanks,
Peter

Hi Peter,

I don’t quite get what are you trying to do, but I advice to do that:

printf(“stuff, %.3d\n”,number)

That should be all.

Alin.


#6

Brian C. wrote:

On Fri, Mar 02, 2007 at 12:39:13AM +0900, Peter B. wrote:

This is a pretty simple question. I need to do a “printf” of some
numbers inside a string. I just can’t figure out how to express a long
string that has that “printf” inside it, because the printf statement
itself has quotes, too.

I think what you were trying to do is:

number = “3”
puts “stuff, #{sprintf “%.3d”, number}”

Note that sprintf(…) is like printf(…) but returns the result as a
string
value, rather than sending it to stdout. Then #{} lets you insert an
arbitary expression inside another string.

But as pointed out by others, you can do this in one go as

printf “stuff, %.3d\n”, number

HTH,

Brian.

Thanks to all you guys. I’ll probably use sprintf, actually, now that
I’m clear about how it’s used.

Cheers.