On Dec 11, 2003, at 14:46, Thomas Adam wrote:

> Hi All,
>
> I am having a rather weird problem with array manipulation.
>
> I have a file with a load of text in it, and I have a line which looks
> like:
>
> vthread << File.new(pathname,
> "r").readlines().to_s().grep(/^foobar/).uniq()

Here uniq() returns an array and you are adding this single object of  
class Array into vthread. You may want to use

vthread.concat File.new ...

instead.

By the way, your example leaves an opened file behind until it is  
garbage collected. While possibly being OK in your environment, in  
general it is better not to leave opened files when you can easily have  
them closed. You can use:

IO.readlines(pathname) instead of File.new(pathname,"r").readlines or  
do this

vthread.concat File.open(pathname,"r") { |_io|
   _io.readlines().to_s().grep(/^foobar/).uniq()
}

When block is done, file will be closed.

>
> the expression /^foobar/ is repeated throughout, but there are
> differences. Now, I would assume there to be a new entry added to the
> array each time grep returns a match. However, while the code does  
> what I
> want it to, doing a:
>
> vthread.length()
>
> returns "1"
>
> Printing this single element to the screen does indeed yield the  
> results,
> but what I want it to do is to add the match each time into a new  
> element
> in the array.
>
> Am I doing something silly?
>
> Thank You All,
>
> Thomas Adam
>
> =====
> "The Linux Weekend Mechanic" -- http://linuxgazette.net
> "TAG Editor"                            -- http://linuxgazette.net
>
> _______________________________________________________________________ 
> _
> BT Yahoo! Broadband - Save ?80 when you order online today. Hurry!  
> Offer ends 21st December 2003. The way the internet was meant to be.  
> http://uk.rd.yahoo.com/evt=21064/*http://btyahoo.yahoo.co.uk
>
>

Sincerely,
Gennady Bystritsky