Vetor com Filtro
Moderador: Moderadores
Vetor com Filtro
Prezados,
Existe alguma função que faça um filtro em um vetor, como é feito com o dbf usando set filter ?
Tenho um vetor carregado e desse vetor preciso filtrar alguns elementos por determinada coluna.
Existe alguma função que faça um filtro em um vetor, como é feito com o dbf usando set filter ?
Tenho um vetor carregado e desse vetor preciso filtrar alguns elementos por determinada coluna.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Vetor com Filtro
Olá Alexandre,
Você pode usar FOR EACH também, veja se dá uma ideia:
Você pode usar FOR EACH também, veja se dá uma ideia:
Código: Selecionar todos
Func Main()
Local aVetores:={}, aFiltro1, aFiltro2
Local nMes3:=3, nMes4:=4
SET CENTURY ON
SET DATE BRIT
AaDd( aVetores, { "", Nil, CToD( "01/03/2019" ), "", Nil } )
AaDd( aVetores, { "", Nil, CToD( "02/04/2019" ), "", Nil } )
AaDd( aVetores, { "", Nil, CToD( "03/03/2019" ), "", Nil } )
AaDd( aVetores, { "", Nil, CToD( "04/04/2019" ), "", Nil } )
aFiltro1:={}
AEval( aVetores, { |x| If( Month( x[3] ) = nMes3, AaDd( aFiltro1, x[3] ), Nil ) } )
aFiltro2:={}
AEval( aVetores, { |x| If( Month( x[3] ) = nMes4, AaDd( aFiltro2, x[3] ), Nil ) } )
Clear Screen
?
? aFiltro1[1]
? aFiltro1[2]
?
? aFiltro2[1]
? aFiltro2[2]
?
Return NilAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Vetor com Filtro
Acho que consegui algo:
Código: Selecionar todos
aLista := {}
hRecord := {=>}
Hb_HSet( hRecord, "ID", 1)
Hb_HSet( hRecord, "CNPJ_CPF", "21512388220")
Hb_HSet( hRecord, "VALOR", 10.00)
aAdd( aLista, hRecord )
hRecord := {=>}
Hb_HSet( hRecord, "ID", 3)
Hb_HSet( hRecord, "CNPJ_CPF", "21512388220")
Hb_HSet( hRecord, "VALOR", 80.00)
aAdd( aLista, hRecord )
hRecord := {=>}
Hb_HSet( hRecord, "ID", 2)
Hb_HSet( hRecord, "CNPJ_CPF", "21512388220")
Hb_HSet( hRecord, "VALOR", 80.00)
aAdd( aLista, hRecord )
hRecord := {=>}
Hb_HSet( hRecord, "ID", 2)
Hb_HSet( hRecord, "CNPJ_CPF", "21512388220")
Hb_HSet( hRecord, "VALOR", 80.00)
aAdd( aLista, hRecord )
hRecord := {=>}
Hb_HSet( hRecord, "ID", 1)
Hb_HSet( hRecord, "CNPJ_CPF", "21512388220")
Hb_HSet( hRecord, "VALOR", 20.00)
aAdd( aLista, hRecord )
aSort( aLista ,,, {|x,y| x["ID"] < y["ID"] } )
nPos := Hb_aScan( aLista, {| a | a["ID"] = 2 })
For Each oElemento In aLista
If oElemento:__enumIsFirst
oElemento:__enumIndex(nPos)
Endif
If oElemento["ID"] = 2
? Str( oElemento["ID"], 10 ) + " " + Transform( oElemento["VALOR"], "@E 999.99")
Endif
Next
Inkey(0)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Vetor com Filtro
Vai posicionar no primeiro elemento oElemento:__enumIndex(nPos) que achou, testa se é o mesmo senão sai do for each, posso montar um vetor auxiliar, a mesma ideia sua Jairo usando um aEval
Código: Selecionar todos
For Each oElemento In aLista
If oElemento:__enumIsFirst
oElemento:__enumIndex(nPos)
Endif
If oElemento["ID"] = 2
? Str( oElemento["ID"], 10 ) + " " + Transform( oElemento["VALOR"], "@E 999.99")
Else
Exit
Endif
Next
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Vetor com Filtro
Jairo,
Usando sua dica, pena que não sai como hash table
Usando sua dica, pena que não sai como hash table
Código: Selecionar todos
aFiltro1:={}
aEval( aLista, { |x| If( x["ID"] = 2, aAdd( aFiltro1, { x["ID"], X["CNPJ_CPF"], X["VALOR"] } ), Nil ) } )
For Each oElemento In aFiltro1
? Str( oElemento[1], 10 ) + " " + Transform( oElemento[3], "@E 999.99")
Next
Vetor com Filtro
Agora sim,
Código: Selecionar todos
aFiltro1:={}
aEval( aLista, { |x| If( x["ID"] = 2, ListaAux( aFiltro1, x["ID"], X["CNPJ_CPF"], X["VALOR"] ), Nil ) } )
For Each oElemento In aFiltro1
? Str( oElemento["ID"], 10 ) + " " + Transform( oElemento["VALOR"], "@E 999.99")
Next
FUNCTION ListaAux( aFiltro, nId, cCPF, nValor )
hRecord := Nil
hRecord := {=>}
Hb_HSet( hRecord, "ID", nId)
Hb_HSet( hRecord, "CNPJ_CPF", cCPF)
Hb_HSet( hRecord, "VALOR", nValor)
aAdd( aFiltro, hRecord )
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Vetor com Filtro
Pois é... Apenas como Array mesmo...asimoes escreveu:Jairo,
Usando sua dica, pena que não sai como hash table
Show de bola Alexandre... Confesso que ainda não entendo nada de hash table.asimoes escreveu:Agora sim
:-Y
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
