Página 2 de 2

duvida com OrdWildSeek

Enviado: 22 Ago 2017 10:32
por dbdc5554
crie um arq temporario grave os fernado e depois os at( fernado (sem ser os começando na 1 coluna

no prg de vendas localizo os produtos por uma ou varias partes do nome e gravo um tep e depois exibo em browser

base de 10.00 fica instantanea 1 segundo por ai
95.xxx acabei de testar uns 4 segundos


PAiva

duvida com OrdWildSeek

Enviado: 22 Ago 2017 11:13
por fladimir
eu nao... parei nao vi novamente

alguem conseguiu::>

duvida com OrdWildSeek

Enviado: 09 Fev 2018 09:33
por asimoes
Voltando ao assunto fiquei brincando com OrdWildSeek, rs

Código: Selecionar todos

  lSeguinte := .F.
  NOMES->( DbGoTop() ) //Tem que colocar o Go Top pra funcionar o OrdWildSeek
   
   DO WHILE NOMES->( OrdWildSeek( "*FERNAND*", lSeguinte ) )
      aAdd( aNomesAux, { NOMES->Nome, IF( Left( NOMES->Nome, 1) = "F", 0, 1 ) } )
      lSeguinte := .T.
   ENDDO
   
   aSort( aNomesAux ,,, {|x,y| y[2] > x[2]} )
   
   aNomes := {}
   
   FOR EACH oElemento IN aNomesAux
      aAdd( aNomes, oElemento[1] )
   NEXT
   
   aChoice(0,0,24,79, aNomes )
Fladimir,

Resulta:
2018-02-09 09_34_41-CDBF - DBF Viewer&Editor.png
2018-02-09 09_34_41-CDBF - DBF Viewer&Editor.png (6.46 KiB) Exibido 858 vezes

duvida com OrdWildSeek

Enviado: 09 Fev 2018 09:40
por asimoes
Uma melhorada:

Código: Selecionar todos

   lSeguinte := .F.
   
   aNomesAux    := {}
   
   NOMES->( DbGoTop() ) //Tem que colocar o Go Top pra funcionar o OrdWildSeek
   
   cPesquisa := "FERNAND"
   
   DO WHILE NOMES->( OrdWildSeek( "*" + cPesquisa + "*", lSeguinte ) )
      aAdd( aNomesAux, { NOMES->Nome, IF( Left( NOMES->Nome, 1) = Left( cPesquisa, 1 ), 0, 1 ) } )
      lSeguinte := .T.
   ENDDO
   
   aSort( aNomesAux ,,, {|x,y| y[2] > x[2]} )
   
   aNomes := {}
   
   FOR EACH oElemento IN aNomesAux
      aAdd( aNomes, oElemento[1] )
   NEXT
   
   aChoice(0,0,24,79, aNomes )

duvida com OrdWildSeek

Enviado: 09 Fev 2018 09:58
por asimoes

Código: Selecionar todos

   cPesquisa := "FERNAND"
   
   DO WHILE NOMES->( OrdWildSeek( "*" + cPesquisa + "*", lSeguinte ) )
      aAdd( aNomesAux, { NOMES->Nome, IF( SubStr( NOMES->Nome, RAT( " ", cPesquisa ) + 1 ) = cPesquisa, 0, 1 ) } )
      lSeguinte := .T.
   ENDDO
Dessa forma a principio não precisa criar nenhum temporário o próprio vetor com asort resolve

duvida com OrdWildSeek

Enviado: 09 Fev 2018 16:59
por asimoes
Outra modificação usando aEval

Código: Selecionar todos

   lSeguinte := .F.
   
   aNomesAux    := {}
   
   NOMES->( DbGoTop() ) //Tem que colocar o Go Top pra funcionar o OrdWildSeek
   
   cPesquisa := "FERNAND"
   
   DO WHILE NOMES->( OrdWildSeek( "*" + cPesquisa + "*", lSeguinte ) )
      aAdd( aNomesAux, { NOMES->Nome, IF( SubStr( NOMES->Nome, RAT( " ", cPesquisa ) + 1 ) = cPesquisa, 0, 1 ) } )
      lSeguinte := .T.
   ENDDO
   
   aSort( aNomesAux ,,, {|x,y| y[2] > x[2]} )
   
   aNomes := {} 
   
   aEval( aNomesAux, {|x,y| aAdd( aNomes, x[1] ) } )

   aChoice( 0, 0, 24, 79, aNomes )

duvida com OrdWildSeek

Enviado: 09 Fev 2018 18:25
por fladimir
Opa... q legal vou testar... Obrigado