string substitution question

L

ljw1001

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

sanha lee

------=_Part_44197_10902424.1133153901098
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

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

I'm reading a file using:

" str =3D 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.

------=_Part_44197_10902424.1133153901098--
 
R

Ross Bamford

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

ljw1001

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?
 
L

ljw1001

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

Ross Bamford

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 %> <% 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).
 
R

Ross Bamford

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

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

William James

Ross said:
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 %> <% end %>"
 
R

Ross Bamford

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


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


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

Lloyd Zusman

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,262
Messages
2,571,052
Members
48,769
Latest member
Clifft

Latest Threads

Top