[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

"chomping" an array at read time

Victor Reyes

1/9/2006 5:44:00 PM

Team,

ruby -v === ruby 1.8.2 (2004-12-25) [powerpc-aix4.3.3.0]

Please don't laugh at my simplistic coding "techniques?"


I am reading a file which contains 1041 one token records into an array:

f_lus = File.open("/file_name", "r")

lus = Array.new
lus = File.read("/file_name")

When I print the size of the array lus it shows: 14377.

So I figured that this has to do with the end of line chars at the end of
each record/token. However, if you have 1 nl char per record the size should
be twice the number of records or 2082 and not 14,377.

I went ahead and created a new array as follows, from the old array in the
same script:

i = 0
newArray = Array.new
lus.each do |lu|
newArray[i] = lu
i += 1
end

Now when I puts the size of array newArray it prints 1041 correctly.

What is happening here, please?
Second, is there a way to chomp a record as it is read into the array?

Thank you

Victor
5 Answers

Ezra Zygmuntowicz

1/9/2006 5:54:00 PM

0


On Jan 9, 2006, at 9:44 AM, Victor Reyes wrote:

> Team,
>
> ruby -v === ruby 1.8.2 (2004-12-25) [powerpc-aix4.3.3.0]
>
> Please don't laugh at my simplistic coding "techniques?"
>
>
> I am reading a file which contains 1041 one token records into an
> array:
>
> f_lus = File.open("/file_name", "r")
>
> lus = Array.new
> lus = File.read("/file_name")

Right here you are createing a new arrau called lus. then you destroy
it and overwrite it with a file handle. Please try this instead:

ezra:~ ez$ cat test.txt
12
324
46
23
dgs
fh
asf
fh
dsg

lus = File.open("test.txt") {|f| f.readlines}

p lus
#=> ["12\n", "324\n", "46\n", "23\n", "dgs\n", "fh\n", "asf\n", "fh
\n", "dsg\n"]



Cheers-
Ezra


James Gray

1/9/2006 5:59:00 PM

0

On Jan 9, 2006, at 11:53 AM, Ezra Zygmuntowicz wrote:

> lus = File.open("test.txt") {|f| f.readlines}

Or just:

lus = File.readlines("test.txt")

James Edward Gray II


Ezra Zygmuntowicz

1/9/2006 6:29:00 PM

0


On Jan 9, 2006, at 9:59 AM, James Edward Gray II wrote:

> On Jan 9, 2006, at 11:53 AM, Ezra Zygmuntowicz wrote:
>
>> lus = File.open("test.txt") {|f| f.readlines}
>
> Or just:
>
> lus = File.readlines("test.txt")

James-

When you do that does it close the file handle as well? I was just
using the block to make sure the file handle gets closed. Are there
certain actions that will close the handle by themselves and others
that won't?

Thanks-
-Ezra

>
> James Edward Gray II
>



Victor Reyes

1/9/2006 8:56:00 PM

0

Thank you both.

Victor

On 1/9/06, Ezra Zygmuntowicz <ezmobius@gmail.com> wrote:
>
>
> On Jan 9, 2006, at 9:59 AM, James Edward Gray II wrote:
>
> > On Jan 9, 2006, at 11:53 AM, Ezra Zygmuntowicz wrote:
> >
> >> lus = File.open("test.txt") {|f| f.readlines}
> >
> > Or just:
> >
> > lus = File.readlines("test.txt")
>
> James-
>
> When you do that does it close the file handle as well? I was just
> using the block to make sure the file handle gets closed. Are there
> certain actions that will close the handle by themselves and others
> that won't?
>
> Thanks-
> -Ezra
>
> >
> > James Edward Gray II
> >
>
>
>

James Gray

1/10/2006 7:55:00 PM

0

On Jan 9, 2006, at 12:28 PM, Ezra Zygmuntowicz wrote:

>
> On Jan 9, 2006, at 9:59 AM, James Edward Gray II wrote:
>
>> On Jan 9, 2006, at 11:53 AM, Ezra Zygmuntowicz wrote:
>>
>>> lus = File.open("test.txt") {|f| f.readlines}
>>
>> Or just:
>>
>> lus = File.readlines("test.txt")
>
> James-
>
> When you do that does it close the file handle as well? I was just
> using the block to make sure the file handle gets closed. Are there
> certain actions that will close the handle by themselves and others
> that won't?

Well, there's no way I know of to get at the file handle used here,
so I sure hope it's closed. I would argue that it's a bug if it
isn't. :)

James Edward Gray II