String substitution question

I'm reading a file using:

  " str = IO.read("textfile1.txt") "

and trying to output the results using

   " puts str "
The problem is that I want to substitute values in the file. It
includes this text: #{(3+4).to_s}

I expected the puts statement to output 7, but it outputs the code
literally as #{(3+4).to_s}

How can i get this substitution to happen?

thanks for your help.

I am not sure, but
how about use eval function

maybe like this
eval(%Q(puts #{str}))

I want it work.
let me know that.
good luck

···

On 11/28/05, ljw1001@gmail.com <ljw1001@gmail.com> wrote:

I'm reading a file using:

  " str = IO.read("textfile1.txt") "

and trying to output the results using

   " puts str "
The problem is that I want to substitute values in the file. It
includes this text: #{(3+4).to_s}

I expected the puts statement to output 7, but it outputs the code
literally as #{(3+4).to_s}

How can i get this substitution to happen?

thanks for your help.

(Caveat: relatively new to Ruby)

I think it's more trouble than it's worth, though I don't doubt it could be done with some insane escaping and eval. I'd have to guess that the #{} expansion is done somewhere in the parser (?).

I recently made use of ERB (included with 1.8.3, don't know about other versions) for this kind of thing, which worked a treat. Your file would contain something like:

  <%= 3+4.to_s %>

(P.s. I know it looks a little bit /.*ML/ but it's not specifically - it's just the way ERB separates the code.

···

On Mon, 28 Nov 2005 04:28:11 -0000, <ljw1001@gmail.com> wrote:

I'm reading a file using:

  " str = IO.read("textfile1.txt") "

and trying to output the results using

   " puts str "
The problem is that I want to substitute values in the file. It
includes this text: #{(3+4).to_s}

I expected the puts statement to output 7, but it outputs the code
literally as #{(3+4).to_s}

How can i get this substitution to happen?

thanks for your help.

--
Ross Bamford - rosco@roscopeco.remove.co.uk

What is ERB?

I had assumed that it would be possible to convert a single quote
string to a double quote string and that would take care of it. Is
that not possible. Maybe I'm looking at this the wrong way.
Substitution is done with the syntax you mention in my current version
of Rails. Is ERB what they use?

I tried it with my current version 1.8.2 and got this message:

(eval):1: warning: parenthesize argument(s) for future version

I'll try again when I've installed 1.8.3.

It is probably possible, maybe using the special quoting operators and so forth, but I imagine it is messy and problematic (?).
There appears to be some automagic escaping going on when # is read into double quoted strings, or something like that.
Rails does use ERB, and I think I'd still suggest it. It's 'Embedded Ruby'. With 1.8 it comes as standard (at least with 1.8.3). You can use it like:

   require 'erb'

   sturf = ['just', 'some', 'stuff']
   src = "<% sturf.length.times do |i| %><%= sturf[i] %> <% end %>"

   text = ERB.new(src).result # => "just some stuff "

You can pass a binding to the 'result' method, so that you can do the following:

   require 'erb'
   class SomeClazz

     def set_some_var
       @foo = 'bar'
       self
     end

     def render_text(s)
       ERB.new(s).result(binding)
     end
   end

   s = SomeClazz.new.set_some_var.render_text('<%= @foo %>') # => "bar"

There is also a native version of ERB as a command - try 'erb' at your prompt (I found it's -x option quite helpful when debugging template problems).

···

On Mon, 28 Nov 2005 12:00:37 -0000, <ljw1001@gmail.com> wrote:

What is ERB?

I had assumed that it would be possible to convert a single quote
string to a double quote string and that would take care of it. Is
that not possible. Maybe I'm looking at this the wrong way.
Substitution is done with the syntax you mention in my current version
of Rails. Is ERB what they use?

--
Ross Bamford - rosco@roscopeco.remove.co.uk

ljw1001@gmail.com writes:

I tried it with my current version 1.8.2 and got this message:

(eval):1: warning: parenthesize argument(s) for future version

I'll try again when I've installed 1.8.3.

To get rid of that error, all you need to do is this:

  eval(%Q(puts(#{str})))

Note the extra parentheses surrounding #{str}.

···

--
Lloyd Zusman
ljz@asfast.com
God bless you.

By that I mean 'that I know of' - I don't know exactly which versions have ERB included, but I bet it's been in for a while...

···

On Mon, 28 Nov 2005 21:16:40 -0000, Ross Bamford <rosco@roscopeco.remove.co.uk> wrote:

With 1.8 it comes as standard (at least with 1.8.3).

--
Ross Bamford - rosco@roscopeco.remove.co.uk

Ross Bamford wrote:

> What is ERB?
>
> I had assumed that it would be possible to convert a single quote
> string to a double quote string and that would take care of it. Is
> that not possible. Maybe I'm looking at this the wrong way.
> Substitution is done with the syntax you mention in my current version
> of Rails. Is ERB what they use?
>

It is probably possible, maybe using the special quoting operators and so
forth, but I imagine it is messy and problematic (?).
There appears to be some automagic escaping going on when # is read into
double quoted strings, or something like that.
Rails does use ERB, and I think I'd still suggest it. It's 'Embedded
Ruby'. With 1.8 it comes as standard (at least with 1.8.3). You can use it
like:

   require 'erb'

   sturf = ['just', 'some', 'stuff']
   src = "<% sturf.length.times do |i| %><%= sturf[i] %> <% end %>"

   src = "<% stuff.each do |s| %><%= s %> <% end %>"

···

On Mon, 28 Nov 2005 12:00:37 -0000, <ljw1001@gmail.com> wrote:

   text = ERB.new(src).result # => "just some stuff "

Sorry. I was just going for a more esoteric example to illustrate you can do anything in there...

···

On Mon, 28 Nov 2005 21:44:34 -0000, William James <w_a_x_man@yahoo.com> wrote:

   sturf = ['just', 'some', 'stuff']
   src = "<% sturf.length.times do |i| %><%= sturf[i] %> <% end %>"

   src = "<% stuff.each do |s| %><%= s %> <% end %>"

--
Ross Bamford - rosco@roscopeco.remove.co.uk