Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Weird behavior with IO#read

Reply
Thread Tools

Weird behavior with IO#read

 
 
Lennon Day-Reynolds
Guest
Posts: n/a
 
      08-24-2004
Okay, maybe I just need to take a break from coding for a couple of
hours, but I can't for the life of me figure out what's going wrong
with this code:

--
BLOCKSIZE=1024*256
open('testdata.in') do |input|
open('testdata.out') do |output|
while (chunk = input.read(BLOCKSIZE)) do
output.write(chunk)
end
end
end
--

On Linux with 1.8.2-preview2, it works as expected (and much faster
than I anticipated, which is good). On Windows XP using the latest
one-click, it terminates after a single iteration through the 'while'
loop. Changing the blocksize doesn't make a difference; neither does
using a different looping construct.

It seems like this is a bug in the Ruby interpreter, but it also seems
so basic as to be unlikely to have slipped under the radar in testing.
Can anyone else confirm this behavior? I'll try again in a few hours
when I get home, but would like to stop banging my head against the
problem sooner than that, if possible.


--
Lennon
rcoder.net


 
Reply With Quote
 
 
 
 
Bill Kelly
Guest
Posts: n/a
 
      08-25-2004
Hi,

From: "Lennon Day-Reynolds" <>
>
> Okay, maybe I just need to take a break from coding for a couple of
> hours, but I can't for the life of me figure out what's going wrong
> with this code:
>
> --
> BLOCKSIZE=1024*256
> open('testdata.in') do |input|
> open('testdata.out') do |output|
> while (chunk = input.read(BLOCKSIZE)) do
> output.write(chunk)
> end
> end
> end
> --
>
> On Linux with 1.8.2-preview2, it works as expected (and much faster
> than I anticipated, which is good). On Windows XP using the latest
> one-click, it terminates after a single iteration through the 'while'
> loop. Changing the blocksize doesn't make a difference; neither does
> using a different looping construct.


Is there binary data in the files? If so try opening them
in binary mode ("rb" and "wb")... Windows sees ^Z as end of
file in "text mode"... an artifact stupidly inherited from
a filesystem that needed it because it only measured file
sizes in blocks and didn't know where the precise end of file
was without the marker character. ("Stupidly inherited"
because windows has never needed that to know where the true
end of file is.)


Hope this helps,

Regards,

Bill




 
Reply With Quote
 
 
 
 
Mike Hall
Guest
Posts: n/a
 
      08-25-2004
Lennon Day-Reynolds wrote:

> while (chunk = input.read(BLOCKSIZE)) do


Too much C programming? I thought that we "shouldn't" use tests like these
in Ruby -- in other words, we should test 'chunk' against 'nil' or emptyness
or something. But then, you say it works OK on one platform...



 
Reply With Quote
 
Lennon Day-Reynolds
Guest
Posts: n/a
 
      08-25-2004
Thank you, Bill. You're right -- I was opening the files in text mode.

See, I had just been coding for too long.

Thanks again.


--
Lennon
rcoder.net


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: A Weird Appearance for a Weird Site David Segall HTML 0 01-22-2011 04:50 AM
Re: A Weird Appearance for a Weird Site Beauregard T. Shagnasty HTML 1 01-21-2011 04:17 PM
Re: A Weird Appearance for a Weird Site richard HTML 0 01-21-2011 07:10 AM
Re: A Weird Appearance for a Weird Site dorayme HTML 1 01-21-2011 06:51 AM
Re: A Weird Appearance for a Weird Site richard HTML 0 01-21-2011 06:46 AM



Advertisments