Clipper On Line • Ver Tópico - Dica do dia: AScan() pra verificar valores
Página 1 de 1

Dica do dia: AScan() pra verificar valores

MensagemEnviado: 14 Jan 2019 10: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:

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


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


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

MensagemEnviado: 14 Jan 2019 14:17
por lugab
Bacana, mestre..

Vislumbro múltiplos usos pra essa dica

Dica do dia: AScan() pra verificar valores

MensagemEnviado: 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.

      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

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

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

Dica do dia: AScan() pra verificar valores

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

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


   CASE ASCan( { 4, 6, 7, 8, 9 }, :Number( "IPCOFCST" ) ) != 0


Nota:
Tive um problema num cliente, por isso alterando a forma de análise.