Forum: Ruby "chomping" an array at read time

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Victor R. (Guest)
on 2006-01-09 19:47
(Received via mailing list)
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
Ezra Z. (Guest)
on 2006-01-09 19:56
(Received via mailing list)
On Jan 9, 2006, at 9:44 AM, Victor R. wrote:

> 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 G. (Guest)
on 2006-01-09 20:02
(Received via mailing list)
On Jan 9, 2006, at 11:53 AM, Ezra Z. wrote:

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

Or just:

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

James Edward G. II
Ezra Z. (Guest)
on 2006-01-09 20:29
(Received via mailing list)
On Jan 9, 2006, at 9:59 AM, James Edward G. II wrote:

> On Jan 9, 2006, at 11:53 AM, Ezra Z. 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
Victor R. (Guest)
on 2006-01-09 22:57
(Received via mailing list)
Thank you both.

Victor
James G. (Guest)
on 2006-01-10 21:55
(Received via mailing list)
On Jan 9, 2006, at 12:28 PM, Ezra Z. wrote:

>
> 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 G. II
This topic is locked and can not be replied to.