Clipper On Line • Ver Tópico - Adicionando uma coluna nova em uma HashTable existente

Adicionando uma coluna nova em uma HashTable existente

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

Moderador: Moderadores

 

Adicionando uma coluna nova em uma HashTable existente

Mensagempor asimoes » 01 Mai 2020 13:40

Precisei disso essa semana, uma HT que é o retultset do banco e precisava adicionar uma coluna nova nessa HT, usando Hb_HMerge é possível fazer isto, o código abaixo é uma demonstração, para quem usa hashtable segue segue a dica


   hTable := {}
   
   FOR I:=1 TO 10
      hRecord := Nil
      hRecord := {=>}
      hRecord["TESTE1"] := I
      hRecord["TESTE2"] := STRZERO(I,2)
      aAdd( hTable, hRecord )
   NEXT
   
   hNewCol := {}
   
   FOR I:=1 TO Len( hTable )
      hRecord := {=>}
      hRecord["TESTE3"] := .F.
      aAdd( hNewCol, hRecord )
   NEXT
   
   FOR I:=1 TO Len( hTable )
      Hb_HMerge( hTable[i], hNewCol[i] )
   NEXT
   
   FOR EACH oElemento IN hTable
      ? oElemento["TESTE1"], oElemento["TESTE2"], oElemento["TESTE3"]
   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)
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

Adicionando uma coluna nova em uma HashTable existente

Mensagempor JoséQuintas » 01 Mai 2020 14:19

Pelo que entendi... não entendi.
Mas vou tentar entender....
Apenas o detalhe de que é um array com hash table chama atenção.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Adicionando uma coluna nova em uma HashTable existente

Mensagempor JoséQuintas » 01 Mai 2020 14:29

Foi o que pensei, basta adicionar o novo hash.

PROCEDURE Main

   LOCAL hTable := {}, I, oVar, hRecord

   FOR I := 1 TO 10
      hRecord := Nil
      hRecord := {=>}
      hRecord[ "TESTE1" ] := I
      hRecord[ "TESTE2" ] := STRZERO(I,2)
      aAdd( hTable, hRecord )
   NEXT

   FOR EACH oVar IN hTable
      oVar[ "TESTE3" ] := .F.  // aqui
   NEXT

   FOR EACH oVar IN hTable
      ? oVar[ "TESTE1" ], oVar[ "TESTE2" ], oVar[ "TESTE3" ]
   NEXT

   Inkey(0)
   RETURN


Mas fica a opção do merge, se quiser acrescentar tudo de uma vez, ou vários campos de uma vez.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Adicionando uma coluna nova em uma HashTable existente

Mensagempor JoséQuintas » 01 Mai 2020 14:46

Só pra efeito de curiosidade, pode servir em outra situação, funcionou assim:

   hTable := Array(10)
   FOR EACH oVar IN hTable
      oVar := {=>}
      oVar[ "TESTE1" ] := oVar:__EnumIndex
      oVar[ "TESTE2" ] := StrZero( oVar:__EnumIndex, 2 )
   NEXT
   AEval( hTable, { | e | e[ "TESTE3" ] := .F. } )
   FOR EACH oVar IN hTable
      ? oVar[ "TESTE1" ], oVar[ "TESTE2" ], oVar[ "TESTE3" ]
   NEXT
   Inkey(0)
   RETURN
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Adicionando uma coluna nova em uma HashTable existente

Mensagempor asimoes » 01 Mai 2020 18:59

JoséQuintas escreveu:Apenas o detalhe de que é um array com hash table chama atenção.


Muito bom os seus exemplos, a questão de ser um array é poder usar aSort da forma que não é array aSort não funciona
Exemplo:
aSort( ::aValorClasse ,,, {|x,y| y["CLASSEVALOR"] > x["CLASSEVALOR"] } )
â–º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

Adicionando uma coluna nova em uma HashTable existente

Mensagempor asimoes » 01 Mai 2020 19:35

aEval foi a melhor de todas

Permite adicionar várias chaves

  aEval( hTable, { | e | e[ "TESTE3" ]  := .F., ;
                            e[ "TESTE4" ]  := .T., ;
                            e[ "MARCADO" ] := .F. } )
â–º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 Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 15 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