From: Robert Klemme Date: 2008-03-27T19:03:38+09:00 Subject: Re: remove regex matched line question 2008/3/26, Ryan Davis : > > On Mar 26, 2008, at 05:15 , Robert Klemme wrote: > > 2008/3/25, Ryan Davis : > >> You're not rejecting anything complicated, so it is just as easy to > >> select what you want instead of rejecting what you don't want: > >> > >> puts File.read("./src.txt").grep(/^[^#]/).join("\n") > > > > You can as well do this which is a tad shorter and probably also more > > efficient than reading into a single String: > > > > puts File.readlines("./src.txt").grep(/^[^#]/) > > Only shorter because of the lack of join... which I do mostly out of > habit but also because puts is subject to the value of $, . Granted, > it doesn't get modified much, but I prefer to know what is going to be > printed. Muscle memory. *shrug* OTOH, if you globally set $, you intentionally do so and want all output to use it. > I doubt the readlines is more efficient as far as memory goes. 1 > string + 1 array + N strings vs 1 array + M strings + 1 array + N > strings. As far as time? I dunno. I could measure but I doubt it makes > much difference in the grand scheme of things. I recall one occasion (I believe in one of Dave Thomas's books) where they could remedy a performance issue by going from String#<< to Array#<<. I'd say the gain comes from the way mem is reallocated: in the Array only Array memory is reallocated which is far less than String mem when you have all in one String. Of course, memory wise every solution that does not require the whole file in mem at some point in time is more efficient and more robust for large files. Kind regards robert -- use.inject do |as, often| as.you_can - without end