Page 1 of 1

Barra de progreso modo texto (consola)

Posted: Tue Oct 25, 2022 2:08 pm
by jparada
Hola,
Tengo muchos procesos en donde no requiero interfaz gráfica, por ello son programas en modo consola, en ocasiones esos procesos son un tanto tardados, así que estoy tratando de agregar una barra de progreso, el detalle que tengo es que el carácter que estoy utilizando que es el 219 no se despliega correctamente en la salida:
img1.png
img1.png (1.39 KiB) Viewed 5146 times
Estoy haciendo algo como esto:

Code: Select all

REQUEST HB_CODEPAGE_ESMWIN
SET( _SET_CODEPAGE, "ESMWIN" )
hb_CdpSelect( "ESMWIN" )

@23,65 Say ( _Porc:= i/nRows ) * 100 Pict '999%'    
@23,42 Say "[" Color "GR+"
@23,43 Say Repl( hb_UTF8ToStr( "█" ), Int( (_Porc * 100)/5 ) ) Color "GR+/B"
@23,63 Say "]" Color "GR+"
También he intentado con hb_UTF8ToStrBox o con Chr(219) y no funciona.

Agradezco si tienen alguna ayuda o alguna otra implementación de barra de progreso modo texto que puedan compartir.

Saludos,
Javier

Re: Barra de progreso modo texto (consola)

Posted: Tue Oct 25, 2022 5:51 pm
by edk
Console and character chr(219) are encoded in ES850, so you need to set this CP or imho better use chr(32) - space and inverse colours

Re: Barra de progreso modo texto (consola)

Posted: Tue Oct 25, 2022 7:38 pm
by jparada
Hi Edward,

Chr(32) this worked well, thanks... BTW, I am using ElapTime( start, end ) to calculate the time the process performs, it returns me the output as in the image.
img1.png
img1.png (3 KiB) Viewed 5105 times
But how could I turn it around to get an output, for example, if it is 14seconds, show Process time: 14s, if it is an hour, Process time: 1hr, if it is hours/minutes, Process time: 1hr 14s and so on, any idea?.

I appreciate your help.

Regards,
Javier

Re: Barra de progreso modo texto (consola)

Posted: Tue Oct 25, 2022 10:13 pm
by edk
¿Quiso decir algo como esto?
Zrzut ekranu 2022-10-26 002247.png
Zrzut ekranu 2022-10-26 002247.png (3.98 KiB) Viewed 5081 times

Code: Select all

cStart := Time()
Do While LastKey() # 27
	Inkey(.01)
	@1,1 Say "Tiempo transcurrido: " + cTimeToStr ( ElapTime ( cStart, Time() ), .F. /* Ceros a la izquierda */ ) + Space ( 12 )
EndDo

Function cTimeToStr ( cTime, lLeadingZero )

#define cHour    "hora"
#define cMinute  "minuto"
#define cSecond  "segundo"
#define cHours   "horas"
#define cMinutes "minutos"
#define cSeconds "segundos"

Local aTime
Default lLeadingZero := .T.
IF .Not. TimeValid( cTime )
	Return "No valid time"
ENDIF
aTime := hb_ATokens ( cTime , ":" )
Return IF ( Val ( aTime [ 1 ] ) <> 0, IF( lLeadingZero, aTime [ 1 ], hb_NtoS ( Val ( aTime [ 1 ] ) ) ) + " " + IF ( Val ( aTime [ 1 ] ) < 2, cHour  , cHours   ) + " ", "" ) + ;
       IF ( Val ( aTime [ 2 ] ) <> 0, IF( lLeadingZero, aTime [ 2 ], hb_NtoS ( Val ( aTime [ 2 ] ) ) ) + " " + IF ( Val ( aTime [ 2 ] ) < 2, cMinute, cMinutes ) + " ", "" ) + ;
       IF ( Val ( aTime [ 3 ] ) <> 0, IF( lLeadingZero, aTime [ 3 ], hb_NtoS ( Val ( aTime [ 3 ] ) ) ) + " " + IF ( Val ( aTime [ 3 ] ) < 2, cSecond, cSeconds )      , "" )

Re: Barra de progreso modo texto (consola)

Posted: Wed Oct 26, 2022 1:19 pm
by jparada
Hi Edward, Thank you very much, it works great!!

I appreciate your help.

Regards,
Javier