I have several files that I have to read, check the contents, and then
write any changes. I overloaded the File class to help me out with
# read the file, execute a block, then write the file File.open(filename, 'r+') do |file| lines = file.readlines yield lines # return if not changing anything file.pos = 0 file.print lines file.truncate(file.pos) end
The method is called with:
File.change(‘awesomefile’) do |contents|
contents.collect! do |line|
# magic happens
# decide not to change anything
This is a huge waste if the files don’t change (as they often don’t).
The problem I’m having is with the “# decide not to change anything” in
the block and passing that back to the method so “# return if not
changing anything” knows the answer. I’m not sure if I can pass an
instance variable around to do this? I don’t really know how that would
work since I don’t really have an instance of file to work with.
Maybe someone has some ideas?