Hi ..
There is approximately an order of magnitude difference in the performance of
these two snippets. Is there a faster way of doing the pure Ruby version?
### use the system call 'cat'
def sys_cat
of = "plato.txt.cat"
clean(of)
l = `cat Plato/*.txt > #{of}`
end
### open each file and copy it
def rby_cat
of = "plato.txt.rby"
clean(of)
off = File.new(of, "w+")
Dir["Plato/*.txt"].each do |f|
text = IO.readlines(f)
off.puts text
end
off.close
end
user system total real
sys_cat 0.000000 0.015625 0.117188 ( 0.167577)
rby_cat 0.937500 0.085938 1.023438 ( 1.064247)
Thanks,
···
--
-mark. (probertm at acm dot org)
Mark Probert wrote:
Hi ..
There is approximately an order of magnitude difference in the performance of these two snippets. Is there a faster way of doing the pure Ruby version?
### use the system call 'cat'
def sys_cat
of = "plato.txt.cat"
clean(of)
l = `cat Plato/*.txt > #{of}`
end
### open each file and copy it
def rby_cat
of = "plato.txt.rby"
clean(of)
off = File.new(of, "w+")
Dir["Plato/*.txt"].each do |f|
text = IO.readlines(f)
off.puts text
end
off.close
end
user system total real
sys_cat 0.000000 0.015625 0.117188 ( 0.167577)
rby_cat 0.937500 0.085938 1.023438 ( 1.064247)
Thanks,
Try mine:
def rby_cat
File.open("file.rby", "w+") do |file|
Dir["*.txt"].each do |f|
file.write(IO.readlines(f))
end
end
end
def faster_cat
of = "plato.txt.fct"
clean(of)
File.open(of, "wb+") do |outf|
Dir["Plato/*.txt"].each do |inf|
outf.puts IO::read(inf)
end
end
end
As I don't have the "Plato/*.txt" files, I can't test it, but that
you're not splitting the file into multiple lines and iterating over
them will be faster.
-austin
···
On Tue, 1 Mar 2005 05:17:03 +0900, Mark Probert <probertm@acm.org> wrote:
There is approximately an order of magnitude difference in the
performance of these two snippets. Is there a faster way of doing
the pure Ruby version?
### use the system call 'cat'
def sys_cat
of = "plato.txt.cat"
clean(of)
l = `cat Plato/*.txt > #{of}`
end
--
Austin Ziegler * halostatue@gmail.com
* Alternate: austin@halostatue.ca