Ola amigos,
Existe alguma função parecida com a OrdWildSeek, para fazer a pesquisa de um treco do item em um matriz.
Uso o ASCAN( aProdutos, { |x| ( alltrim(cTXT) $ x[2]) } ), mais ele me posiciona no sempre primeiro item que corresponde a pesquisa, como faço pra ele listar todas as coincidências que existem dentro da matriz.
Grato.
Como pesquisar dados em matriz parecido a OrdWildSeek
Moderador: Moderadores
-
gilbertosilverio
- Usuário Nível 3

- Mensagens: 339
- Registrado em: 18 Jan 2009 10:39
- Localização: Ribeirao Pires - SP
Como pesquisar dados em matriz parecido a OrdWildSeek
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Como pesquisar dados em matriz parecido a OrdWildSeek
Amigo, tente o seguinte:
Abraços,
Código: Selecionar todos
n_pos_ini:=1 //declarar no inicio do PRG
...
n_pos:=ASCAN( aProdutos, { |x| ( alltrim(cTXT) $ x[2]) }, n_Pos_ini )
n_pos_ini:=n_pos+1Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
gilbertosilverio
- Usuário Nível 3

- Mensagens: 339
- Registrado em: 18 Jan 2009 10:39
- Localização: Ribeirao Pires - SP
Como pesquisar dados em matriz parecido a OrdWildSeek
Toledo,
Obrigado pela ajuda.
Veja como ficou... não e aquela maravilha de codigo, mais funciona... rsrsrs
Obrigado pela ajuda.
Veja como ficou... não e aquela maravilha de codigo, mais funciona... rsrsrs
Código: Selecionar todos
FUNCTION PESQUISA_TRECHO_01()
LOCAL aMATA:={}, DT1, oBrowse31, nPOS:=0, C:=1, nPOS_INI:=0, nPOS_A:=0
PRIVATE cTXT:=SPAC(20)
MSGGETTEXTO( [Pesquisar item em estoque], [Entre trecho da pesquisa], @cTXT )
IF cTXT <> SPAC(20)
DT1:=ALLTRIM(@cTXT)
oBar:=HProgressBar():NewBox( "Pesquisando : "+lTrim(strZERO(C,6))+" De "+lTrim(strZERO(LEN(aProdutos),6))+" Registro(s)",,,350,,LEN(aProdutos))
DO WHILE .T.
nPOS := ASCAN( aProdutos, { |x| ( alltrim(DT1) $ x[2]) }, C, LEN(aProdutos)-C )
IF nPOS > 0
nPOS_A := ASCAN( aMATA, { |x| ( STRZERO(nPOS,6) $ x[5]) } )
IF nPOS_A = 0
AADD ( aMATA, { aPRODUTOS[nPOS,2], aPRODUTOS[nPOS,1], [EAN], [SALBASE], STRZERO(nPOS,6) } )
ENDIF
ENDIF
IF C > LEN(aProdutos)
oBar:CLOSE()
EXIT
ELSE
C++
oBar:Step("Pesquisando : "+lTrim(strzero(C,6))+" De "+lTrim(Strzero(len(aProdutos),6))+" Registro(s)")
ENDIF
ENDDO
ELSE
RETURN NIL
ENDIF
IF LEN(aMATA) = 0
HWG_MSGSTOP([Não existem dados para esta pesquisa],[Atenção])
RETURN NIL
ENDIF
ASORT( aMATA, 1, , { |X,Y| X[1] < Y[1] } )
INIT DIALOG oDlg TITLE "Resultado da pesquisa " AT 40,40 SIZE 980,560 CLIPPER ;
FONT HFont():Add( 'Verdana',0,-13,400,,,) STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_SIZEBOX
Thisfo31 := oDlg
@ 10, 40 SAY oLABEL5 CAPTION [Itens localizado] TRANSPARENT SIZE 400,19
@ 10, 65 BROWSE oBrowse31 ARRAY SIZE 960,440 AUTOEDIT STYLE WS_TABSTOP+WS_HSCROLL ;
ON CLICK { || zREC:=ThisFo31:oBrowse31:aarray[ThisFo31:oBrowse31:nCurrent, 05], HWG_ENDDIALOG() }
hwg_CREATEARLIST( oBrowse31, aMata )
oBrowse31:aColumns[01]:heading := "Descrição"
oBrowse31:aColumns[02]:heading := "Codigo"
oBrowse31:aColumns[03]:heading := "EAN"
oBrowse31:aColumns[04]:heading := "Sal Base"
oBrowse31:aColumns[05]:heading := "Registro"
oBrowse31:aColumns[1]:nJusHead := DT_LEFT
oBrowse31:aColumns[2]:nJusHead := DT_LEFT
oBrowse31:aColumns[3]:nJusHead := DT_LEFT
oBrowse31:aColumns[4]:nJusHead := DT_LEFT
oBrowse31:aColumns[5]:nJusHead := DT_LEFT
oBROWSE31:REFRESH()
oBROWSE31:Setfocus()
@ 863,513 BUTTONEX oButtonex2 CAPTION "&Sair" SIZE 98,32 STYLE WS_TABSTOP ON CLICK {|| hwg_EndDialog() }
oButtonex2:Anchor := 12
ACTIVATE DIALOG oDlg
RETURN NIL
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *>
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Como pesquisar dados em matriz parecido a OrdWildSeek
Olá!
Segue um exemplo antigo, publicado na documentação do Clipper 5.2 (Norton Guides):
Segue um exemplo antigo, publicado na documentação do Clipper 5.2 (Norton Guides):
Código: Selecionar todos
. This example demonstrates scanning for multiple instances of a
search argument after a match is found:
LOCAL aArray := { "Tom", "Mary", "Sue",;
"Mary" }, nStart := 1
//
// Get last array element position
nAtEnd := LEN(aArray)
DO WHILE (nPos := ASCAN(aArray, "Mary", ;
nStart)) > 0
? nPos, aArray[nPos]
//
// Get new starting position and test
// boundary condition
IF (nStart := ++nPos) > nAtEnd
EXIT
ENDIF
ENDDO[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Como pesquisar dados em matriz parecido a OrdWildSeek
Olá,
Baseado no exemplo do Alexandre, montei o exemplo abaixo, veja se ajuda.
T+
Baseado no exemplo do Alexandre, montei o exemplo abaixo, veja se ajuda.
Código: Selecionar todos
function main
local aArray := { "Tom", "Mary", "Sue", "Mary Test" }
cls
? "Extamente igual a <Mary>", hb_valtoexp( ArrayLocate( aArray, "Mary" ) )
? "Que contenha a string <Mary>", hb_valtoexp( ArrayLocate( aArray, "Mary", .F. ) )
? "Que contenha a string <Mary> apartir do elemento 3", hb_valtoexp( ArrayLocate( aArray, "Mary", .F., 3 ) )
? "Extamente igual a <Mary> apartir do elemento 3", hb_valtoexp( ArrayLocate( aArray, "Mary", .T., 3 ) )
return NIL
********************
function ArrayLocate( aArray, cString, lExact, nStart )
********************
local nAtEnd, nPos, aRet := { }
__DefaultNIL( @lExact, .T. )
__DefaultNIL( @nStart, 1 )
nAtEnd := len(aArray)
cString := lower(cString)
do while ( nPos := ascan( aArray, { |aItem| iif( lExact, lower(aItem) == cString, lower(aItem) = cString ) }, nStart ) ) > 0
aadd( aRet, { nPos, aArray[nPos] } )
// Get new starting position and test boundary condition
if ( nStart := ++nPos) > nAtEnd
exit
endif
enddo
return aRet
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.