Clipper On Line • Ver Tópico - aScan em uma Hash Table

aScan em uma Hash Table

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

aScan em uma Hash Table

Mensagempor asimoes » 12 Abr 2017 11:02

Pessoal,

Como é que eu faço um aScan para localizar um determinado registro em uma Hash Table ?
Preciso localizar na hRecords um determinado registro que eu sei o nome do campo, usando aScan ou função equivalente

Código exemplo:
        With Object ::cRecordSet := :Execute()
            nTotRec  := :RecordCount()
            nCampos  := :Fields():Count -1
            IF nTotRec = 0
                cErro:="A consulta não retornou registro(s)"
                Break
            ENDIF
            ::aLista := Array(nTotRec, nCampos)
            hRecords := { => }
            Do While ! :Eof
               hRecord := { => }
               For nField := 0 TO ( :Fields:Count ) - 1
                  hb_HSet( hRecord, :Fields( nField ):Name, :Fields( nField ):value ) // for each record, hrecord holds a hash of column name: column value
               Next                                                                                       // hrecord holds a hash of column name: column value
               hb_HSet( hRecords, LTrim( Str( :AbsolutePosition ) ), hRecord )                            // like so, a hash of recno: hash of columns/values of this record
               :MoveNext()
            ENDDO
         End With
RETURN hRecords
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

aScan em uma Hash Table

Mensagempor asimoes » 12 Abr 2017 12:32

Acabei fazendo uma função até ter uma solução melhor;


IF hb_ScanHT( aListaOrg, "CODIGO", cOrgaoUsu ) > 0
   ...
ENDIF

FUNCTION hb_ScanHT( hTable, cCampo, cSearch )
LOCAL nPosicao := 0, oElemento
   hb_Default(@hTable, {=>} )
   hb_Default(@cCampo, "" )
   hb_Default(@cSearch, "" )
   ____cAuxSearch := cCampo
   FOR EACH oElemento IN hTable
      IF oElemento["&____cAuxSearch."] == cSearch
         nPosicao := oElemento:__EnumIndex()
         EXIT
      ENDIF
   NEXT
RETURN nPosicao
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

aScan em uma Hash Table

Mensagempor rossine » 12 Abr 2017 14:33

Olá Alexandre,

Veja se é esta função que você está precisando:

n := hb_hPos( hTable, cSearch )

? n


T+
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
rossine
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 313
Data de registro: 06 Ago 2007 09:57
Cidade/Estado: Divinópolis-MG
Curtiu: 1 vez
Mens.Curtidas: 21 vezes

aScan em uma Hash Table

Mensagempor asimoes » 12 Abr 2017 19:16

Rossine,

Não funcionou a função hb_hPos
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

aScan em uma Hash Table

Mensagempor asimoes » 12 Abr 2017 19:25

O que eu quero é poder localizar em uma hash table uma determinada informação de um campo qualquer

Por exemplo quero pesquisar nesta ht pelo campo apto , eu sei que o acesso ao registro é assim ["1"]["APTO"] eu quero localizar o 104 na tabela.
A função que fiz logo acima localiza qq informação de qq campo, eu queria saber se o harbour tem isso pronto.

{
  "1":
  {
    "APTO": "104",
    "SACADO": "ALEXANDRE JOAO SIMOES LUZ                         ",
    "ENDERECO": "RUA AJURATUBA,                ",
    "BAIRRO": " OS SANTOS     ",
    "CIDADE": "RIO DE JANEIRO      ",
    "UF": "RJ",
    "CEP": "20735050",
    "CPF": "00000000000",
    "ATIVO": true,
    "DATA": "20160809"
  }
}
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

aScan em uma Hash Table

Mensagempor asimoes » 02 Dez 2017 06:50

Respondendo a minha pergunta:

nPos := hb_HScan( hTable, {| nKey, cChave | cChave["APTO"] = "104"} )
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Bing [Bot], Google [Bot] e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro