[lnkForumImage]
TotalShareware - Download Free Software

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


 

Lucas Handelsman

11/2/2006 12:21:00 AM

Pretty new to ruby (and programming but am getting better).

I am importing data with DBI and I want display and counter as each row
is imported. I can get the display to show:

1
2
3
4
5
6
7
8
9
10
etc...

but I don't want a linebreak after the counter is displayed. I want it
just to keep refreshing itself, basically. Am I missing something with
puts or print or p? Any ideas?

--
Posted via http://www.ruby-....

6 Answers

Gabriele Marrone

11/2/2006 12:37:00 AM

0


Il giorno 02/nov/06, alle ore 01:21, Lucas Handelsman ha scritto:

> but I don't want a linebreak after the counter is displayed. I
> want it
> just to keep refreshing itself, basically. Am I missing something
> with
> puts or print or p? Any ideas?

This isn't language dependent, and there isn't a "standard" way which
will work under every environment.

Under Unix you can print the character \r to go back to the beginning
of the line, but keep in mind that stdout (unlike stderr) is line
buffered: by default, it prints its output just when a line break is
found. If you want to force it to write to your console, you have to
flush it manually.
Try something like this:

10.times do |i|
print "\r#{i} "
sleep 0.5
$stdout.flush
end
print "\n"

I don't think it would work under Windows. Does it?
Anyway, even if it won't work on a specific console, the user will be
able to understand its output anyway (especially because of the space
I left at the end of the string), so it shouldn't be a big issue.


Lutz Horn

11/3/2006 10:19:00 AM

0

Lucas Handelsman wrote:
> but I don't want a linebreak after the counter is displayed.

You can set the varibale $\ (the output record separator for the print
and IO#write, default is nil) to to a value you like.

irb(main):001:0> $\ = "_"
=> "_"
irb(main):002:0> [1, 2, 3].each {|i| print i}
1_2_3_=> [1, 2, 3]

This won't solve the flush problem, though.

--
Posted via http://www.ruby-....

Patrick Spence

11/3/2006 7:18:00 PM

0

Lucas Handelsman wrote:
> Pretty new to ruby (and programming but am getting better).
>
> I am importing data with DBI and I want display and counter as each row
> is imported. I can get the display to show:
>
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 10
> etc...
>
> but I don't want a linebreak after the counter is displayed. I want it
> just to keep refreshing itself, basically. Am I missing something with
> puts or print or p? Any ideas?

1.upto(50) {|index|
print("\b" * index.to_s().length << index.to_s())
sleep(0.2)
}

--
Posted via http://www.ruby-....

Lucas Handelsman

11/3/2006 7:22:00 PM

0

Thanks guys, I will give it a shot and let you know how it goes.

--
Posted via http://www.ruby-....

Patrick Spence

11/3/2006 7:40:00 PM

0

Lucas Handelsman wrote:
> Thanks guys, I will give it a shot and let you know how it goes.

Sorry about the lack of explanation for the code snippet in my previous
reply...

#-- simple counter from 1 to 50
1.upto(50) {|index|

#-- print the number of backspaces necessary to delete the number,
#-- this is what causes the number to appear to refresh
print("\b" * index.to_s().length << index.to_s())

#-- pause 2/10's of a second before returning to top of loop
sleep(0.2)
}


--
Posted via http://www.ruby-....

rumpelstiltskin

10/6/2012 2:57:00 AM

0

On Fri, 5 Oct 2012 10:41:31 -0700 (PDT), flanier <bflanier@gmail.com>
wrote:

>On Oct 5, 8:51?am, rumpelstiltskin <rumpelstilts...@x.com> wrote:
>> ? ?I didn't write that about Globalist,...
>
>I may have mis-attributed that quote...it may have come from a fellow
>named Henry...or maybe someone else.

:->

>
>"Mitigate? "My Lord, my client only went in to buy a seven-penny
>stamp. But as he was kept waiting by ten old ladies with pension
>books, he lost his patience and blew the safe." ~ Rumpole of the Bailey


Totally different from Rumpel(stiltskin) of course, but I
did love that TV series.