Ajuda com Matriz Multidimensional
Moderador: Moderadores
Ajuda com Matriz Multidimensional
Olá
Não estou conseguindo fazer algumas coisa com esse tipo de matriz. Alguém pode dar uma ajuda?
dois procedimentos
imagine uma matriz com 500 linhas e 30 colunas.
cada coluna representa um determinado tipo de informação
primeiro caso
percorrer todas as linhas e eliminar quando um determinado tipo de informação não satisfazer. Eliminar, não deixar como nill.
segundo caso
percorrer todas as linhas e ir copiando para outra matriz, somente algumas linhas quando a informação não satisfazer.
Obs. pegar as informações , sem problemas. Não estou conseguindo excluir ou copiar mesmo. Com matriz normal não tenho problemas, só com essa tipo multidimensional mesmo.
tentei com Adel , Acopy , mas nao deu certo
Agradeço qualquer ajuda
Poka
Não estou conseguindo fazer algumas coisa com esse tipo de matriz. Alguém pode dar uma ajuda?
dois procedimentos
imagine uma matriz com 500 linhas e 30 colunas.
cada coluna representa um determinado tipo de informação
primeiro caso
percorrer todas as linhas e eliminar quando um determinado tipo de informação não satisfazer. Eliminar, não deixar como nill.
segundo caso
percorrer todas as linhas e ir copiando para outra matriz, somente algumas linhas quando a informação não satisfazer.
Obs. pegar as informações , sem problemas. Não estou conseguindo excluir ou copiar mesmo. Com matriz normal não tenho problemas, só com essa tipo multidimensional mesmo.
tentei com Adel , Acopy , mas nao deu certo
Agradeço qualquer ajuda
Poka
-
Paredes01
- Usuário Nível 2

- Mensagens: 52
- Registrado em: 20 Mai 2012 11:22
- Localização: Mérida, Yucatán, México
Ajuda com Matriz Multidimensional
Hola
Ejemplo:
Voy guardando la información capturada:
AADD(aMA,{ cCOD ,; // 1
cDES ,; // 2
cMENU ,; // 3
nCANT ,; // 4
nPRECIO ,; // 5
nPUBL ,; // 6
cART22 ,; // 7
cTIPO ,; // 8
nIMP ,; // 9
nIVA ,; //10
cPROV ,; //11
nCOSTO ,; //12
nPRECIOX ,; //13
nPZAXCJA ,; //14
nPFAR ,; //15
cBARR ,; //16
cNADR ,; //17
cDEKA ,; //18
nD ,; //19
cONCO ,; //20
nDESCMAXF,; //21
nDESCMAXP,; //22
nCOSTO_P ,; //23
nCOSTO_U ,; //24
cSUN ,; //25
nIVASUN ,; //26
nIMPSUN ,; //27
nCANTOFTA,; //28
nPUBX ,; //29
cLINEA ,; //30
nDESCLIN ,; //31
xCEDULA ,; //32
xNOM ,; //33
xRECETA ,; //34
nCAJAS ,; //35
cKEY ,; //36
cIDIMSS ,; //37
cIDHRAE ,; //38
cES_CAUSE,; //39
nSolicita }) //40
elimino lo que no me sirve y lo demas lo gardo en 2 arrays difrentes para guardar e imprimir
aSiCause:={}
aNoCause:={}
Z:= 0
For Z = 1 TO Len(aMA)
If Left(aMA[Z, 1],9) = "ELIMINADO"
ADEL(aMA, Z, .T.)
Endif
Next
Y:= 0
For Y = 1 to Len(aMA)
If !Empty(aMA[Y,39])
AADD(aNoCause,{ aMA[Y, 1] ,; // 1
aMA[Y, 2] ,; // 2
aMA[Y, 3] ,; // 3
aMA[Y, 4] ,; // 4
aMA[Y, 5] ,; // 5
aMA[Y, 6] ,; // 6
aMA[Y, 7] ,; // 7
aMA[Y, 8] ,; // 8
aMA[Y, 9] ,; // 9
aMA[Y,10] ,; //10
aMA[Y,11] ,; //11
aMA[Y,12] ,; //12
aMA[Y,13] ,; //13
aMA[Y,14] ,; //14
aMA[Y,15] ,; //15
aMA[Y,16] ,; //16
aMA[Y,17] ,; //17
aMA[Y,18] ,; //18
aMA[Y,19] ,; //19
aMA[Y,20] ,; //20
aMA[Y,21] ,; //21
aMA[Y,22] ,; //22
aMA[Y,23] ,; //23
aMA[Y,24] ,; //24
aMA[Y,25] ,; //25
aMA[Y,26] ,; //26
aMA[Y,27] ,; //27
aMA[Y,28] ,; //28
aMA[Y,29] ,; //29
aMA[Y,30] ,; //30
aMA[Y,31] ,; //31
aMA[Y,32] ,; //32
aMA[Y,33] ,; //33
aMA[Y,34] ,; //34
aMA[Y,35] ,; //35
aMA[Y,36] ,; //36
aMA[Y,37] ,; //37
aMA[Y,38] ,; //38
aMA[Y,39] ,; //39
aMA[Y,40] }) //40
Endif
Next
Z:= 0
For Z = 1 to Len(aMA)
If Empty(aMA[Z, 39])
AADD(aSiCause,{ aMA[Z, 1] ,; // 1
aMA[Z, 2] ,; // 2
aMA[Z, 3] ,; // 3
aMA[Z, 4] ,; // 4
aMA[Z, 5] ,; // 5
aMA[Z, 6] ,; // 6
aMA[Z, 7] ,; // 7
aMA[Z, 8] ,; // 8
aMA[Z, 9] ,; // 9
aMA[Z,10] ,; //10
aMA[Z,11] ,; //11
aMA[Z,12] ,; //12
aMA[Z,13] ,; //13
aMA[Z,14] ,; //14
aMA[Z,15] ,; //15
aMA[Z,16] ,; //16
aMA[Z,17] ,; //17
aMA[Z,18] ,; //18
aMA[Z,19] ,; //19
aMA[Z,20] ,; //20
aMA[Z,21] ,; //21
aMA[Z,22] ,; //22
aMA[Z,23] ,; //23
aMA[Z,24] ,; //24
aMA[Z,25] ,; //25
aMA[Z,26] ,; //26
aMA[Z,27] ,; //27
aMA[Z,28] ,; //28
aMA[Z,29] ,; //29
aMA[Z,30] ,; //30
aMA[Z,31] ,; //31
aMA[Z,32] ,; //32
aMA[Z,33] ,; //33
aMA[Z,34] ,; //34
aMA[Z,35] ,; //35
aMA[Z,36] ,; //36
aMA[Z,37] ,; //37
aMA[Z,38] ,; //38
aMA[Z,39] ,; //39
aMA[Z,40] }) //40
Endif
Next
If Len(aSiCause) > 0
Alert("Cause : " + Str(Len(aSiCause)), , ,2)
nTOTAL = 0
nDEP_UNO = 0
nDEP_DOS = 0
nDEP_TRES = 0
nDEP_CUATRO = 0
IVA = 0
n15SUN = 0
n05SUN = 0
AEVAL(aSiCause,{ |X| nTOTAL += X[9] })
AEVAL(aSiCause,{ |X| IIF( X[8] = "A", nDEP_UNO += X[9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "E", nDEP_TRES += X[9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "B" , nDEP_DOS += X[ 9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "B" , IVA += X[10], NIL ) } )
nTOTAL = ROUND( nTOTAL, 2 )
zSTA = "1"
GRABA_NOTA(aSiCause,"1")
IMP_NOTA(aSiCause)
Endif
If Len(aNoCause) > 0
Alert("No Cause : " + Str(Len(aNoCause)), , ,2)
nTOTAL = 0
nDEP_UNO = 0
nDEP_DOS = 0
nDEP_TRES = 0
nDEP_CUATRO = 0
IVA = 0
n15SUN = 0
n05SUN = 0
AEVAL(aNoCause,{ |X| nTOTAL += X[9] })
AEVAL(aNoCause,{ |X| IIF( X[8] = "A", nDEP_UNO += X[9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "E", nDEP_TRES += X[9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "B" , nDEP_DOS += X[ 9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "B" , IVA += X[10], NIL ) } )
nTOTAL = ROUND( nTOTAL, 2 )
zSTA = "1"
GRABA_NOTA(aNoCause,"2")
IMP_NOTA(aNoCause)
Endif
Saludos
Ejemplo:
Voy guardando la información capturada:
AADD(aMA,{ cCOD ,; // 1
cDES ,; // 2
cMENU ,; // 3
nCANT ,; // 4
nPRECIO ,; // 5
nPUBL ,; // 6
cART22 ,; // 7
cTIPO ,; // 8
nIMP ,; // 9
nIVA ,; //10
cPROV ,; //11
nCOSTO ,; //12
nPRECIOX ,; //13
nPZAXCJA ,; //14
nPFAR ,; //15
cBARR ,; //16
cNADR ,; //17
cDEKA ,; //18
nD ,; //19
cONCO ,; //20
nDESCMAXF,; //21
nDESCMAXP,; //22
nCOSTO_P ,; //23
nCOSTO_U ,; //24
cSUN ,; //25
nIVASUN ,; //26
nIMPSUN ,; //27
nCANTOFTA,; //28
nPUBX ,; //29
cLINEA ,; //30
nDESCLIN ,; //31
xCEDULA ,; //32
xNOM ,; //33
xRECETA ,; //34
nCAJAS ,; //35
cKEY ,; //36
cIDIMSS ,; //37
cIDHRAE ,; //38
cES_CAUSE,; //39
nSolicita }) //40
elimino lo que no me sirve y lo demas lo gardo en 2 arrays difrentes para guardar e imprimir
aSiCause:={}
aNoCause:={}
Z:= 0
For Z = 1 TO Len(aMA)
If Left(aMA[Z, 1],9) = "ELIMINADO"
ADEL(aMA, Z, .T.)
Endif
Next
Y:= 0
For Y = 1 to Len(aMA)
If !Empty(aMA[Y,39])
AADD(aNoCause,{ aMA[Y, 1] ,; // 1
aMA[Y, 2] ,; // 2
aMA[Y, 3] ,; // 3
aMA[Y, 4] ,; // 4
aMA[Y, 5] ,; // 5
aMA[Y, 6] ,; // 6
aMA[Y, 7] ,; // 7
aMA[Y, 8] ,; // 8
aMA[Y, 9] ,; // 9
aMA[Y,10] ,; //10
aMA[Y,11] ,; //11
aMA[Y,12] ,; //12
aMA[Y,13] ,; //13
aMA[Y,14] ,; //14
aMA[Y,15] ,; //15
aMA[Y,16] ,; //16
aMA[Y,17] ,; //17
aMA[Y,18] ,; //18
aMA[Y,19] ,; //19
aMA[Y,20] ,; //20
aMA[Y,21] ,; //21
aMA[Y,22] ,; //22
aMA[Y,23] ,; //23
aMA[Y,24] ,; //24
aMA[Y,25] ,; //25
aMA[Y,26] ,; //26
aMA[Y,27] ,; //27
aMA[Y,28] ,; //28
aMA[Y,29] ,; //29
aMA[Y,30] ,; //30
aMA[Y,31] ,; //31
aMA[Y,32] ,; //32
aMA[Y,33] ,; //33
aMA[Y,34] ,; //34
aMA[Y,35] ,; //35
aMA[Y,36] ,; //36
aMA[Y,37] ,; //37
aMA[Y,38] ,; //38
aMA[Y,39] ,; //39
aMA[Y,40] }) //40
Endif
Next
Z:= 0
For Z = 1 to Len(aMA)
If Empty(aMA[Z, 39])
AADD(aSiCause,{ aMA[Z, 1] ,; // 1
aMA[Z, 2] ,; // 2
aMA[Z, 3] ,; // 3
aMA[Z, 4] ,; // 4
aMA[Z, 5] ,; // 5
aMA[Z, 6] ,; // 6
aMA[Z, 7] ,; // 7
aMA[Z, 8] ,; // 8
aMA[Z, 9] ,; // 9
aMA[Z,10] ,; //10
aMA[Z,11] ,; //11
aMA[Z,12] ,; //12
aMA[Z,13] ,; //13
aMA[Z,14] ,; //14
aMA[Z,15] ,; //15
aMA[Z,16] ,; //16
aMA[Z,17] ,; //17
aMA[Z,18] ,; //18
aMA[Z,19] ,; //19
aMA[Z,20] ,; //20
aMA[Z,21] ,; //21
aMA[Z,22] ,; //22
aMA[Z,23] ,; //23
aMA[Z,24] ,; //24
aMA[Z,25] ,; //25
aMA[Z,26] ,; //26
aMA[Z,27] ,; //27
aMA[Z,28] ,; //28
aMA[Z,29] ,; //29
aMA[Z,30] ,; //30
aMA[Z,31] ,; //31
aMA[Z,32] ,; //32
aMA[Z,33] ,; //33
aMA[Z,34] ,; //34
aMA[Z,35] ,; //35
aMA[Z,36] ,; //36
aMA[Z,37] ,; //37
aMA[Z,38] ,; //38
aMA[Z,39] ,; //39
aMA[Z,40] }) //40
Endif
Next
If Len(aSiCause) > 0
Alert("Cause : " + Str(Len(aSiCause)), , ,2)
nTOTAL = 0
nDEP_UNO = 0
nDEP_DOS = 0
nDEP_TRES = 0
nDEP_CUATRO = 0
IVA = 0
n15SUN = 0
n05SUN = 0
AEVAL(aSiCause,{ |X| nTOTAL += X[9] })
AEVAL(aSiCause,{ |X| IIF( X[8] = "A", nDEP_UNO += X[9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "E", nDEP_TRES += X[9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "B" , nDEP_DOS += X[ 9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "B" , IVA += X[10], NIL ) } )
nTOTAL = ROUND( nTOTAL, 2 )
zSTA = "1"
GRABA_NOTA(aSiCause,"1")
IMP_NOTA(aSiCause)
Endif
If Len(aNoCause) > 0
Alert("No Cause : " + Str(Len(aNoCause)), , ,2)
nTOTAL = 0
nDEP_UNO = 0
nDEP_DOS = 0
nDEP_TRES = 0
nDEP_CUATRO = 0
IVA = 0
n15SUN = 0
n05SUN = 0
AEVAL(aNoCause,{ |X| nTOTAL += X[9] })
AEVAL(aNoCause,{ |X| IIF( X[8] = "A", nDEP_UNO += X[9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "E", nDEP_TRES += X[9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "B" , nDEP_DOS += X[ 9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "B" , IVA += X[10], NIL ) } )
nTOTAL = ROUND( nTOTAL, 2 )
zSTA = "1"
GRABA_NOTA(aNoCause,"2")
IMP_NOTA(aNoCause)
Endif
Saludos
Ajuda com Matriz Multidimensional
Olá
Obrigado por responder
ainda não deu certo
um exemplo seria este
matriz:={}
AADD(matriz, {"LEME","SP"})
AADD(matriz, {"CAMPINAS","SP"})
AADD(matriz, {"RIO JANEIRO","RJ"})
AADD(matriz, {"SAO PAULO","SP"})
matriz aqui tem 4 linhas e 2 colunas
matriz aqui teria que ter 3 linhas
outro exemplo passando para outra matriz copia (já resolveria o meu problema também)
mCopia:={}
obs:
esta matriz a cada seleção do sistema vem com linhas e colunas diferente, por isso fazendo com o ADD acima não resolve.
se não fosse multidimensional, tudo bem, é + facil
se alguém tiver + alguma idéia de como fazer?
esta matriz está sempre mudando pois vem de SELECT do FIREBIRD, e no select as vezes não tenho todos os campos para testar.
então preciso fazer mais uma seleção na matriz para depois imprimir.
Obrigado
Um abraço
Poka
Obrigado por responder
ainda não deu certo
um exemplo seria este
matriz:={}
AADD(matriz, {"LEME","SP"})
AADD(matriz, {"CAMPINAS","SP"})
AADD(matriz, {"RIO JANEIRO","RJ"})
AADD(matriz, {"SAO PAULO","SP"})
matriz aqui tem 4 linhas e 2 colunas
Código: Selecionar todos
FOR A:= 1 TO LEN(matriz)
IF matriz[A,2] = "RJ"
// eliminar a linha 3 da matriz ( não vi como fazer)
ENDIF
NEXT
outro exemplo passando para outra matriz copia (já resolveria o meu problema também)
mCopia:={}
Código: Selecionar todos
FOR A:= 1 TO LEN(matriz)
IF matriz[A,2] <> "RJ"
// aqui copio o que me interessa
aadd( Mcopia,{ matriz[a,1], Mcopia,[a,2] })
// tem como copiar a linha e colunas sem especificar coluna por coluna? ( veja obs abaixo)
ENDIF
NEXT
esta matriz a cada seleção do sistema vem com linhas e colunas diferente, por isso fazendo com o ADD acima não resolve.
se não fosse multidimensional, tudo bem, é + facil
se alguém tiver + alguma idéia de como fazer?
esta matriz está sempre mudando pois vem de SELECT do FIREBIRD, e no select as vezes não tenho todos os campos para testar.
então preciso fazer mais uma seleção na matriz para depois imprimir.
Obrigado
Um abraço
Poka
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Ajuda com Matriz Multidimensional
Código: Selecionar todos
matriz:={}
AADD(matriz, {"LEME","SP"})
AADD(matriz, {"CAMPINAS","SP"})
AADD(matriz, {"RIO JANEIRO","RJ"})
AADD(matriz, {"SAO PAULO","SP"})
//matriz aqui tem 4 linhas e 2 colunas
FOR A:= 1 TO LEN(matriz)
IF matriz[A,2] = "RJ"
ADel( matriz, A ) // eliminar a linha 3 da matriz ( não vi como fazer)
ASize( matriz, Len( matriz ) - 1 ) // elimina o elemento da matriz
A-- // decrementa o tamanho da matriz
ENDIF
NEXT
Hb_Alert( Hb_NToS( Len( matriz ) ) )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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Ajuda com Matriz Multidimensional
Da mesma forma que faria com um array normal.... ou quase...
Em Harbour..
Eliminar elemento:
hb_ADel( array, número, .T. )
Adicionar elemento em outro array:
Aadd( aOutro, aEste[ nCont ] )
Se precisar, aClone( aEste[ nCont ] )
Observações:
- Pra eliminar elemento, melhor processar do fim pro começo pra não ter erro, e não complicar algum controle extra
- Pro AAdd(), se precisar use aClone()
o FOR EACH pode ser interessante.
Em Harbour..
Eliminar elemento:
hb_ADel( array, número, .T. )
Adicionar elemento em outro array:
Aadd( aOutro, aEste[ nCont ] )
Se precisar, aClone( aEste[ nCont ] )
Observações:
- Pra eliminar elemento, melhor processar do fim pro começo pra não ter erro, e não complicar algum controle extra
- Pro AAdd(), se precisar use aClone()
o FOR EACH pode ser interessante.
Código: Selecionar todos
FOR EACH oElement IN aSuaLista DESCEND
IF oElement[ 4 ] != "SP"
hb_ADel( aSuaLista, oElement:__ENumIndex, .T. )
ENDIF
NEXT
Código: Selecionar todos
aOutra := {}
FOR EACH oElement IN aSuaLista
IF oElement[ 4 ] == "SP"
AAdd( aOutra, aClone( oElement ) )
ENDIF
NEXT
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Ajuda com Matriz Multidimensional
Usando aEval
Corrigindo, tem que ser mesmo por For..Each..Descend pra dar certo conforme o Quintas esplicou.
Código: Selecionar todos
aEval( matriz, {|x,y| IF( x[2] = "RJ", hb_ADel( matriz, y, .T. ), ) } )
►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)
Ajuda com Matriz Multidimensional
Obrigado Quintas e Asimoes pelas explicações. Já coloquei na minha rotina aqui e deu td ok.
Nunca ia chegar nisso, mesmo consultando todos os livros que tenho aqui não conseguiria. Tem exemplos só com matriz normal.
Obrigado
Poka
Nunca ia chegar nisso, mesmo consultando todos os livros que tenho aqui não conseguiria. Tem exemplos só com matriz normal.
Obrigado
Poka
Ajuda com Matriz Multidimensional
Poka,
Deixa eu fazer uma “correção” sobre o TÍTULO do tópico: a dúvida apresentada não é sobre uma matriz MULTIdimensional, já que são somente 2 dimensões (linhas e colunas). É só uma matriz (bidimensional), como uma simples planilha do Excel.
Já uma matriz multidimensional tem outros planos, como por exemplo uma PASTA de trabalho do Excel, que contém várias planilhas, com suas respectivas linhas e colunas, cujos dados podem ser agrupados.
Pra começar, imagina a matriz VENDAS (bidimensional):
[Dia Venda Dinheiro Fiado]
dia1 100 75 25
dia2 110 60 50...
dia31 95 35 60
Quer o fiado do dia 02? VENDAS[2,4] -> segunda linha, quarta coluna.
Feito.
Agora, imagina que a matriz VENDAS tem outra dimensão, além de linhas e colunas, para conter os dados de 10 filiais. Aqui é que entra o conceito de Multidimensional: o Plano1 mostra os dados da Filial1 (com suas linhas e colunas), o Plano2 mostra a Filial2 (idem) e assim por diante.
Quer o total geral de FIADO do dia 02, incluindo todos os planos (filiais)?
É só somar:
VENDAS[1,2,4] -> fiado da filial 1, dia 2, coluna 4
+VENDAS[2,2,4] -> fiado da filial 2, dia 2, coluna 4
+VENDAS[3,2,4] -> fiado da filial 3, dia 2, coluna 4
etc.
Bão, não sei afirmar que se existe algum limite no Harbour quanto ao número de planos, nunca tentei (prefiro usar DBFs temporários), mas trabalhei com uma linguagem chamada APL, muito tempo atrás, e não tinha limite além da memória. Ou seja, você poderia incluir outro plano, como por exemplo PAÍS):
VENDAS[55,1,2,4] -> Brasil, Filial 1, dia 2, coluna 4
Ou ainda região:
VENDAS[5,55,1,2,4] -> América do Sul, Brasil, Filial 1, dia 2, coluna 4
Pra terminar, limitei a coisa ao CONCEITO, não me preocupei com sintaxe, nem entrei no mérito das funções AEVAL etc.
Agora é com você.
Deixa eu fazer uma “correção” sobre o TÍTULO do tópico: a dúvida apresentada não é sobre uma matriz MULTIdimensional, já que são somente 2 dimensões (linhas e colunas). É só uma matriz (bidimensional), como uma simples planilha do Excel.
Já uma matriz multidimensional tem outros planos, como por exemplo uma PASTA de trabalho do Excel, que contém várias planilhas, com suas respectivas linhas e colunas, cujos dados podem ser agrupados.
Pra começar, imagina a matriz VENDAS (bidimensional):
[Dia Venda Dinheiro Fiado]
dia1 100 75 25
dia2 110 60 50...
dia31 95 35 60
Quer o fiado do dia 02? VENDAS[2,4] -> segunda linha, quarta coluna.
Feito.
Agora, imagina que a matriz VENDAS tem outra dimensão, além de linhas e colunas, para conter os dados de 10 filiais. Aqui é que entra o conceito de Multidimensional: o Plano1 mostra os dados da Filial1 (com suas linhas e colunas), o Plano2 mostra a Filial2 (idem) e assim por diante.
Quer o total geral de FIADO do dia 02, incluindo todos os planos (filiais)?
É só somar:
VENDAS[1,2,4] -> fiado da filial 1, dia 2, coluna 4
+VENDAS[2,2,4] -> fiado da filial 2, dia 2, coluna 4
+VENDAS[3,2,4] -> fiado da filial 3, dia 2, coluna 4
etc.
Bão, não sei afirmar que se existe algum limite no Harbour quanto ao número de planos, nunca tentei (prefiro usar DBFs temporários), mas trabalhei com uma linguagem chamada APL, muito tempo atrás, e não tinha limite além da memória. Ou seja, você poderia incluir outro plano, como por exemplo PAÍS):
VENDAS[55,1,2,4] -> Brasil, Filial 1, dia 2, coluna 4
Ou ainda região:
VENDAS[5,55,1,2,4] -> América do Sul, Brasil, Filial 1, dia 2, coluna 4
Pra terminar, limitei a coisa ao CONCEITO, não me preocupei com sintaxe, nem entrei no mérito das funções AEVAL etc.
Agora é com você.
Ajuda com Matriz Multidimensional
Bom dia
Mas já deu certo aqui.
Obrigado
Poka
Eolo só dei um exemplo patético, essa matriz pode vir com 10, 20 30 colunas, depende da seleção do usuário para emitir relatórios.Deixa eu fazer uma “correção” sobre o TÍTULO do tópico: a dúvida apresentada não é sobre uma matriz MULTIdimensional, já que são somente 2 dimensões (linhas e colunas). É só uma matriz (bidimensional), como uma simples planilha do Excel.
Mas já deu certo aqui.
Obrigado
Poka
Ajuda com Matriz Multidimensional
Olá a todos
voltando ao tópico.
tenho 2 matrizes multidimensional com vários vetores
m1 e m2
quero juntar m2 com m1
tentei com acopy mas não deu certo
alguém pode dar uma ajuda?
Obrigado
Poka
voltando ao tópico.
tenho 2 matrizes multidimensional com vários vetores
m1 e m2
quero juntar m2 com m1
tentei com acopy mas não deu certo
alguém pode dar uma ajuda?
Obrigado
Poka
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Ajuda com Matriz Multidimensional
Não sei se entendi: m1 vai ficar com o que tinha mais m2?
Código: Selecionar todos
FOR EACH oElement IN m2
AAdd( m1, oElement )
NEXT
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Ajuda com Matriz Multidimensional
Valeu Quintas, deu certo, era isso mesmo que eu precisava.
Obrigado, um abraço.
Poka
Obrigado, um abraço.
Poka

