Parsing text files with dynamic contents

Let’s guess a simple example: i need to parse a text file, wityh
variables
inside, and then output again the resulting text to a file or to screen.

-------------start example text------------

hello, it is #{now}, your name is #{name}

-------------end example text------------

variables could be written also $var, or whatever else could be better.

but obviously when i do

file.each do |line|
puts line #here i need to do something to find the variable and
output the correct value
end

How would you ruby experts do the correct parsing to output values
instead
of the text content? Is there any class available that do this?

Thank you very much for helping

Andrea M.

http://www.superandrew.it

“The real problem is not whether machines think but whether men do.”
(B. F. Skinner )

On Fri, Feb 02, 2007 at 06:35:21AM +0900, Andrea M. wrote:

variables could be written also $var, or whatever else could be better.

but obviously when i do

file.each do |line|
puts line #here i need to do something to find the variable and
output the correct value
end

How would you ruby experts do the correct parsing to output values instead
of the text content? Is there any class available that do this?

Google for ‘erb’ and ‘eruby’

Well, that seems to be exactly what i was looking for, thank you Brian.
So i
think i could give erb every line to parse or make him parse the entire
file
before output it on the screen, right?
now, i’ve got a little question more.

Let’s say i have a class, Foo, who calls a method of another class to
print
the output. For example

class Foo

@w
@myvar

def initialize
w=Writer.new
end

def print_something
w.put_on_screen(1)
end
end

class Writer
def put_on_screen(number)
file=File.open(“./screens/screen#{number}”,“r”)
file.each do |line|
e=ERB.new(line)
puts e.result
end
end
end

in the txt file, how can i make visible @myvar to print it on the
screen?

Thanks again

2007/2/1, Brian C. [email protected]:

How would you ruby experts do the correct parsing to output values
instead
of the text content? Is there any class available that do this?

Google for ‘erb’ and ‘eruby’

Andrea M.

cell. +39 333 2672629
email: [email protected]
http://www.superandrew.it

“The real problem is not whether machines think but whether men do.”
(B. F. Skinner )

2007/2/2, Jan S. [email protected]:

print

end
file=File.open(“./screens/screen#{number}”,“r”)

ERB#result has another parameter, where you can pass binding - the
vars in the file will be evaluated in that context (see
http://ruby-doc.org/core/classes/ERB.html#M002835)

wow, that’s great! I didn’t understand very well how the method binding
passes that instance variables, it seems that passing a binding object
is
like passing an array of instance variable of the object for which it
is
called?

I’ve tried to look up in the docs, but i didn’ find a clear explanation.

Thanks a lot

Andrea M.

http://www.superandrew.it

“The real problem is not whether machines think but whether men do.”
(B. F. Skinner )

On 2/2/07, Andrea M. [email protected] wrote:

@w
@myvar

def initialize
w=Writer.new
end

def print_something

  • w.put_on_screen(1)
  • w.put_on_screen(1, binding)
    

end
end

class Writer

  • def put_on_screen(number)
  • def put_on_screen(number, b=TOPLEVEL_BINDING)
file=File.open("./screens/screen#{number}","r")
        file.each do |line|
          e=ERB.new(line)
  •           puts e.result
    
  •          puts e.result(b)
    
        end

end
end

in the txt file, how can i make visible @myvar to print it on the screen?

ERB#result has another parameter, where you can pass binding - the
vars in the file will be evaluated in that context (see
http://ruby-doc.org/core/classes/ERB.html#M002835)