Barra de progreso modo texto (consola)

HMG en Español

Moderator: Rathinagiri

Post Reply
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Barra de progreso modo texto (consola)

Post 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 4684 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
edk
Posts: 999
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: Barra de progreso modo texto (consola)

Post 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
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Re: Barra de progreso modo texto (consola)

Post 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 4643 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
edk
Posts: 999
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: Barra de progreso modo texto (consola)

Post 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 4619 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 )      , "" )
jparada
Posts: 433
Joined: Fri Jan 23, 2009 5:18 pm

Re: Barra de progreso modo texto (consola)

Post by jparada »

Hi Edward, Thank you very much, it works great!!

I appreciate your help.

Regards,
Javier
Post Reply