On Mar 4, 2007, at 9:08 PM, Jason Burgett wrote: > Wow, I appreciate the advice. But, I didn't understand much of that. > Isn't there any way to just do something similar to a gsub and > write it > back? It isn't all that complicated. Assume you have a file named 'counterfile' that contains: counter: 0 The file is a single line of text with the 0 appearing at byte offset 9. The 'c' in this example is at byte offset 0. Then the following code will 'update' the counter by overwriting the file starting at byte offset 9. File.open('counterfile', 'r+') { |f| f.seek(9) # position file at byte offset 9 f.puts(ARGV[0]) # write the first command line argument to the file } That is it. Stick that code in a file called 'update' and then run: ruby update 100 Take a look at 'counterfile' and you'll see: counter: 100 Your file has been updated. You have to remember that from the OS perspective, a file is simply a stream of bytes. The OS doesn't really perceive the file as a collection of lines of text. If you ran that code again and gave '2' as the command line argument, you're going to end up with a 0 and a newline left over from the previous write because the '2' and the newline will only replace the 1 and the first zero of '100'. Simply discarding and rewriting a file can often be much simpler than figuring out how to remember file offsets and arrange for a file to be updated in place. It can get even more complicated if you are dealing with multi-byte text encodings. In any case, File#seek is the basic way to move to a new position in a file is ultimately how random access I/O is implemented. Gary Wright