Dica do dia: AScan() pra verificar valores

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dica do dia: AScan() pra verificar valores

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Dica do dia: AScan() pra verificar valores

Mensagem por lugab »

Bacana, mestre..

Vislumbro múltiplos usos pra essa dica
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dica do dia: AScan() pra verificar valores

Mensagem 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 ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dica do dia: AScan() pra verificar valores

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dica do dia: AScan() pra verificar valores

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder