Página 1 de 1

Dica do dia: AScan() pra verificar valores

Enviado: 14 Jan 2019 11:33
por JoséQuintas
Vi isso uma vez nos fontes do Harbour, achei interessante, e tenho usado.
Num uso recente, usei pra testar teclas.
Compare:

Código: Selecionar todos

nKey := 0
DO WHILE ! Str( nKey, 3 ) $ " 27,  5, 24, 19,  4"
   nKey := Inkey()
ENDDO

Código: Selecionar todos

nKey := 0
DO WHILE nKey != K_ESC .AND. nKey != K_UP .AND. nKey == K_DOWN .AND. nKey == K_LEFT .AND. nKey == K_RIGHT
   nKey := Inkey(0)
ENDDO

Código: Selecionar todos

nKey := 0
DO WHILE ASCan( { K_ESC, K_UP, K_DOWN, K_LEFT, K_RIGHT }, nKey ) == 0
   nKey := Inkey(0)
ENDDO
No primeiro modo, toda vez que olhar o fonte precisa raciocionar qual tecla equivale a cada código.
No segundo modo, o fonte parece ficar embaralhado.
No terceiro modo fica mais instantâneo "enxergar" as teclas.

Dica do dia: AScan() pra verificar valores

Enviado: 14 Jan 2019 15:17
por lugab
Bacana, mestre..

Vislumbro múltiplos usos pra essa dica

Dica do dia: AScan() pra verificar valores

Enviado: 06 Mai 2020 10:21
por JoséQuintas
O cuidado com isso é sobre o SET EXACT ON/OFF.
Na dúvida, uso a opção de codeblock.

Código: Selecionar todos

      IF ASCan( { "102", "103", "300", "400" }, { | e | e == Substr( :String( "IPICMCST" ), 2, 3 ) } ) == 0
Aliás...
Será que precisamos mesmo de SET EXACT OFF ?

Dica do dia: AScan() pra verificar valores

Enviado: 06 Mai 2020 10:23
por JoséQuintas
Nesse último que postei, talvez alterar pra numérico:

Código: Selecionar todos

      IF ASCan( { 102, 103, 300, 400 }, Val( Substr( :String( "IPICMCST" ), 2, 3 ) ) ) == 0

Dica do dia: AScan() pra verificar valores

Enviado: 06 Mai 2020 10:36
por JoséQuintas
Um exemplo prático, alterando agora:

Código: Selecionar todos

   CASE ASCan( { "04", "06", "07", "08", "09" }, { | e | e == :String( "IPCOFCST" ) } ) != 0

Código: Selecionar todos

   CASE ASCan( { 4, 6, 7, 8, 9 }, :Number( "IPCOFCST" ) ) != 0
Nota:
Tive um problema num cliente, por isso alterando a forma de análise.