From: Ilmari Heikkinen Date: 2007-09-24T21:00:59+09:00 Subject: Re: I am new to Ruby and I could use some expert advice as to how I can make this code run faster. On 9/22/07, Nobuyoshi Nakada wrote: > Hi, > > At Fri, 21 Sep 2007 07:05:10 +0900, > Ruby Maniac wrote in [ruby-talk:270110]: > > def scramble(fname) > > _fname = fname + ".scrambled" > File.new(fname, "rb") do |f| > File.new(_fname, "wb+") do |ff| > ff.write(f.read.tr("\0-\177", "\200-\377")) > end > end > > end > > -- > Nobu Nakada > And the benchmark results for the above code on a 6.7M file: $ time ruby -rscramble -e 'scramble_original("trace")' real 0m11.626s user 0m9.781s sys 0m1.844s $ time ruby -rscramble -e 'scramble_nobu("trace")' real 0m0.099s user 0m0.044s sys 0m0.032s 116x speedup and 7 less loc $ cat scramble.rb def scramble_original(fname) f = File.new(fname, "rb") _fname = fname + ".scrambled" begin File.exist?(_fname) if File.delete(_fname) rescue end ff = File.new(_fname, "wb+") for l in f l.each_byte{|c| ff.write((c | 0x80).chr) } end f.close() ff.close() end def scramble_nobu(fname) File.open(fname, 'rb'){|in_f| File.open(fname + '.scrambled', 'wb'){|out_f| out_f.write(in_f.read.tr("\0-\177", "\200-\377")) } } end