[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

changing a files' content

Oliver Fox

12/4/2007 9:18:00 AM

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.
--
Posted via http://www.ruby-....

5 Answers

Robert Dober

12/4/2007 10:59:00 AM

0

On Dec 4, 2007 10:18 AM, Paul Fox <olifoxpaul@googlemail.com> wrote:
> 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

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

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

Oliver Fox

12/4/2007 11:11:00 AM

0

Robert Dober 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?
--
Posted via http://www.ruby-....

Robert Dober

12/4/2007 12:22:00 PM

0

On Dec 4, 2007 12:11 PM, Paul Fox <olifoxpaul@googlemail.com> wrote:
> Robert Dober 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-....
>
>



--

http://ruby-smalltalk.blo...

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

MonkeeSage

12/4/2007 3:07:00 PM

0

On Dec 4, 3:18 am, Paul Fox <olifoxp...@googlemail.com> wrote:
> 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.
> --
> Posted viahttp://www.ruby-....

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

lrlebron@gmail.com

12/7/2007 9:31:00 PM

0

On Dec 4, 3:18 am, Paul Fox <olifoxp...@googlemail.com> wrote:
> 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.
> --
> Posted viahttp://www.ruby-....

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