Estou tentando fazer uma barra de progresso para o terminal mas tá difícil...
para i = 1, 100 inicio
imprima('\r ', i)
sis.durma(1000)
fim
Segue um exemplo:
//progresso em prisma terminal
local bar = '';
local str_fmt = string.formate;
para i = 1 , 100 inicio
bar = bar .. '#'
progresso = str_fmt('[%s]%d%%\r', bar, i);
es.escreva(progresso);
es.esvazie();
sis.durma(1000);
fim
Observe que é necessário esvaziar o buffer de saída (es.esvazie) para que o resultado seja mostrado imediatamente, visto que em situação normal é o escape \n que faz isso. Neste caso não queremos ir para próxima linha.
Perceba que usei funções da biblioteca string, es (entrada e saída) e sis (sistema operacional);
PS.: o %s é substituído por uma string na função string.formate
o %d por um número inteiro e o %% por um '%' sinal de porcentagem.
Você poderia usar o operador de unir strings '..' (dois pontos) ao invés de usar string.formate, eu prefiro usar a função.
Por questão de eficiência e rapidez declare uma variável local para função string.formate:
local str_fmt = string.formate;
assim use str_fmt dentro do laço 'para', desse jeito é mais rápido.
Falou...
Preparando esse exemplo, percebi um bug no linux:
a função sis.durma() não aceita parâmetro menor que 1000, caso seja passado 300, por exemplo, é tratado como se fosse zero e não espera tempo algum. Já corrigi e vou postar na próxima versão.
brigadão Adalberto,
aproveitando pra deixar um código mais refinado:
local barra = {}
para i=1, 100 inicio
barra[i] = '-'
fim
local str_fmt = string.formate;
para i=1,100 inicio
barra[i] ="■"
local progresso = str_fmt('|%s| %d%%\r', tabela.concat(barra,""), i)
es.escreva(progresso)
es.esvazie()
sis.durma(1000)
fim
■■■■■■■■■■■■■■■■■■■■■■■■■■-------------------------------------------------------------------------]27%