Vetor multidimensional

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

fxavierds
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 18 Jul 2005 18:04

Vetor multidimensional

Mensagem por fxavierds »

Galera como trabalho com vetor multidimensional em clipper?

Algo assim
aVet := {"1","2","3","4"}
aVet[1][1] := {"A","B"}

Como faço isso usando AADD e ASCAN pra pesquisar para não inserir um item duas vezes?
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Vetor multidimensional

Mensagem por sygecom »

Buenas,

Código: Selecionar todos

aVet := {}
AADD(aVet,{"A","B"})

IF AScan( aVet, {|a| a[2] = "B" } )=0
   Alert("Nao Achou, vai adicionar")
   AADD(aVet,{"A1","B2"})
ENDIF
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
fxavierds
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 18 Jul 2005 18:04

Re: Vetor multidimensional

Mensagem por fxavierds »

Cara vlw pela resposta, o problema é q tenho que fazer algo mais complexo, por exemplo

aVetor := {}
Vou procurar se tem algo desses valores
{"1","2","3","4"}

Se não tiver adiciono, até aqui blz
Dai pego um campo assim: "A/B/C"
E procuro se existe A, se não existir adiciono AADD(aVetor[1],"A") então ficaria aVetor[1][1] = "A" correto?
Dai procuro se B existe em aVetor[1][1] se não adiciono B como iten do indice onde está A, entendeu?
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Vetor multidimensional

Mensagem por gvc »

Explique melhor, por favor.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
fxavierds
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 18 Jul 2005 18:04

Re: Vetor multidimensional

Mensagem por fxavierds »

cara é como se fosse uma arvore...

um indice do array pode ter 0 ou N subitens...e assim sucessivamente...
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Vetor multidimensional

Mensagem por alxsts »

Olá!

Dê uma olhada neste tópico, por você iniciado em 17-09-2009 ou neste tópico. Ambos contem exemplos de código que com certeza vão te ajudar...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Vetor multidimensional

Mensagem por sygecom »

Olá fxavierds,
Tente falar um pouco mais o que você deseja, eu particularmente não entendi o que você deseja !
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Vetor multidimensional

Mensagem por gvc »

O sistema de array não é indicado para trabalhar com arvore binária.
Se vc exemplificar o que quer, talvez seja possível achar alguma forma de resolver.
O sistema de indexação do Clipper é BTree+. Talvez seja melhor pensar em usar arquivo indexado do que o array.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
fxavierds
Usuário Nível 1
Usuário Nível 1
Mensagens: 23
Registrado em: 18 Jul 2005 18:04

Re: Vetor multidimensional

Mensagem por fxavierds »

Aceito sugestoes...tudo q quero é construir uma arvore
se me ajudarem com isso já serve...
imagine que tenho uma tabela com um campo preenchido assim:

Registro 1: A/B/C
Registro 2: A/
Registro 3: B/C
.
.
.
Registro N: ?/?

Tenho q pegar esses valores e gerar uma arvore, os primeiros caracteres antes da "/" seram os primeiros nós, o segundos os seguintes e ai vai..
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Vetor multidimensional

Mensagem por Toledo »

Desta maneira como você quer fazer acho que vai ser difícil, o que você poderia fazer é o seguinte:

Código: Selecionar todos

Priv aVet:= {}
cLetra:="A"
AADD_(cLetra)
cLetra:="B"
AADD_(cLetra)
cLetra:="C"
AADD_(cLetra)
cLetra:="A"
AADD_(cLetra)
cLetra:="B"
AADD_(cLetra)
cLetra:="C"
AADD_(cLetra)

Código: Selecionar todos

Func AADD_(cLetra)
Local nQta:=LEN(aVet)
IF nQta=0
  AADD(aVet,{cLetra,"",""})
ELSE
  FOR i=1 TO 3
    IF aVet[nQta,i]!=cLetra
     IF EMPT(aVet[nQta,i])
      aVet[nQta,i]:=cLetra
     ELSE
      IF i=3
        AADD(aVet,{cLetra,"",""})
      ENDIF
     ENDIF
   ELSE
     AADD(aVet,{cLetra,"",""})
     EXIT
   ENDIF
  NEXT
ENDIF
Retu Nil
Acho que vai funcionar.

Abraços,
Toledo - 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
Responder