Forum: Ruby Sleep

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.
Adam S. (Guest)
on 2008-12-19 03:30
(Received via mailing list)
This program is very simple.  It is suppose to load in the text file,
load
each character into an array, then print out the array one letter at a
time.  It is supposed to wait 1 second each time it prints.  This
freezes
every time I run it.  Any ideas?

Adam


class Slow_Array

    def array_split
        @f = File.open('Text_for_TextReader.txt','r') do |f|
            f.gets.scan(/\w/)
        end
    end

    def print_and_wait
        @f.each {
            |i|
            print i
            sleep 1
        }
    end

end

#-------------------------------------------------
# Main logic
TextReader = Slow_Array.new

# Bring file into program
TextReader.array_split

# Print each character, waiting one second in between each printing
TextReader.print_and_wait
Einar Magnús Boson (Guest)
on 2008-12-19 03:49
(Received via mailing list)
On 19.12.2008, at 01:21 , Adam S. wrote:

> class Slow_Array
>            print i
> # Bring file into program
> TextReader.array_split
>
> # Print each character, waiting one second in between each printing
> TextReader.print_and_wait
>
> --
> Put your computer to work.
> www.volunteerathome.com


It doesn't freeze, but the output is buffered so it appears that way.
try adding a flush:

   print i
   STDOUT.flush
   sleep 1


einarmagnus
Michael F. (Guest)
on 2008-12-19 04:10
(Received via mailing list)
On Fri, Dec 19, 2008 at 10:21 AM, Adam S. <removed_email_address@domain.invalid>
wrote:
>    def array_split
>        }
>
> # Print each character, waiting one second in between each printing
> TextReader.print_and_wait

You can either:

$stdout.sync = true

or:

class SlowArray
  def slow_each
    File.open('Text_for_TextReader.txt') do |file|
      while line = file.gets
        puts line
        sleep 1
      end
  end
end

SlowArray.new.slow_each

^ manveru
Adam S. (Guest)
on 2008-12-19 22:55
(Received via mailing list)
STDOUT.flush
Did exactly what I wanted and it was an easy fix.  I would have never
figured that out.  Thank you.

Adam
This topic is locked and can not be replied to.