From: Robert Klemme Date: 2007-06-06T21:20:13+09:00 Subject: Re: efficient regex scanning On 06.06.2007 13:08, dblack@wobblini.net wrote: > Hi -- > > On Wed, 6 Jun 2007, Trochalakis Christos wrote: > >> Hello there, >> >> I wan't to extract all the words from a file and so i wrote the >> following code: >> >> file = ARGV[0] >> File.open('output','w') {|f| >> IO.read(file).scan(/\w+/).each{|w| f.print w} >> } >> >> The problem with this code is that it stores all the words in an array >> which is not so good in terms of efficiency. >> Is there a better way to do it? >> Something like IO.read(file).each_scan { foo } > > You could do something like this (untested, and reversing your logic > somewhat): > > File.open(file).each {|line| f.print(line.scan(/\w+/)) } > > (You might want to join them with a space or something so they don't > all run together.) You're not closing the IO. I know it's not an issue for a small script but... I'd do this: ARGF.each {|line| puts line.scan /\w+/} :-) Kind regards robert