Changing a files' content

hi all,
i have a text file with various lines, and i want to alter some of these
using regex and gsub.

so i have patterns={/some_pattern/=>“replacement text”}
and i’m thinking this:
in = File.open(filename)
while (line=in.gets)
if line.strip =~ pattern
line.gsub(pattern,patterns[pattern])
end
end

but i’m not sure if that’s efficient? and of course, i’m struggling on
the best way of writing those changes back into the file.

any thoughts?
thanks,
f.

On Dec 4, 2007 10:18 AM, Paul F. [email protected] wrote:

end
end

Maybe you would like to do this

ARGF.each | line |
line.gsub(…) if line…
print line
end

and then
ruby -i.bup source.rb file1, …

HTH
Robert

http://ruby-smalltalk.blogspot.com/


All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)

Robert D. wrote:

ruby -i.bup source.rb file1, …

thanks for the reply the -i flag looks like it’ll be useful, but in my
current situation, i need to be able to do it via an instance method,
rather than command line.
i guess i could call system() to do it, but tht doesn’t seem right?

On Dec 4, 2007 12:11 PM, Paul F. [email protected] wrote:

Robert D. wrote:

ruby -i.bup source.rb file1, …

thanks for the reply the -i flag looks like it’ll be useful, but in my
current situation, i need to be able to do it via an instance method,
rather than command line.
I fail to understand, can you elaborate on the calling environment?
Assuming that you cannot use the -i flag I would be tempted to read
the file into memory or use tempfile to create a copy of the original
file and than open the original file with write access (“w”), if this
is not feasible either I would (as a last resort ) go for read-write
access, this is quite messy at least FWIAC :(.
Hopefully somebody else can give you (us) better information about
that particular issue.

Robert

i guess i could call system() to do it, but tht doesn’t seem right?


Posted via http://www.ruby-forum.com/.

http://ruby-smalltalk.blogspot.com/


All truth passes through three stages. First, it is ridiculed. Second,
it is violently opposed. Third, it is accepted as being self-evident.
Schopenhauer (attr.)

On Dec 4, 3:18 am, Paul F. [email protected] wrote:

end
end

but i’m not sure if that’s efficient? and of course, i’m struggling on
the best way of writing those changes back into the file.

any thoughts?
thanks,
f.

Posted viahttp://www.ruby-forum.com/.

I did something similar using the rio library. Cleaned up some vb
files in place

require ‘rio’
rio(‘C://test’).all.files('.vb’) do |f|
rio(f) <f.contents.gsub(/'UPGRADE.
\s/,“”).gsub(/On Error GoTo
ErrHandler/,“Try”).gsub(/ErrHandler:/,“Catch ex as Exception\n”).gsub(/
Resume Next/,“End Try”)
end

On Dec 4, 3:18 am, Paul F. [email protected] wrote:

end
end

but i’m not sure if that’s efficient? and of course, i’m struggling on
the best way of writing those changes back into the file.

any thoughts?
thanks,
f.

Posted viahttp://www.ruby-forum.com/.

patterns = { /some_pattern/ => “replacement text” }

File.open(filename, ‘r+’) { | handle |
out = []
handle.readlines { | line |
patterns.each { | pattern, replacement |
if line.strip =~ pattern
line = line.gsub(pattern, replacement)
end
}
out << line
}
handle.write(out.join(‘’))
}

Untested…

Regards,
Jordan