Página 1 de 1

Matriz multidimensionais - usando a função AADD

Enviado: 13 Mar 2015 11:19
por billy1943
Estou às voltas com o tratamento de matrizes em um sistema e explico o que eu não estou conseguindo:

A variável caractere que coloco abaixo (Cnumeros) seria como eu quero que uma matriz seja produzida pelo sistema, porque aí eu trabalharia com a mesma como desejasse.

Assim, a célula 1 da matriz conteria = 00,02,28 e se eu quiser trabalhar com cada elemento (00 ou 02 ou 28) não haveria problema.

A última célula seriam os valores [27,00,01] e assim por diante, posso andar na matriz que tem, neste caso, 28 elementos, mas cada hora é um número e a matriz tem de ser dinâmica.

Não posso estipular o número total previamente, tenho que criar a matriz usando a função AADD.

O problema está em converter esse campo caractere em uma matriz( Anumeros).

Já tentei usar a função AT para rastrear os caracteres `{{´ ou ´{`mas a matriz produzida saiu errada.
Também tentei ir "andando" dentro da variável avançando 11 caracteres, num loop FOR ... NEXT, rastreando-o com o CLD mas a matriz produzida não é gerada do jeito que eu preciso.

Em tempo: essa variável (Cnumeros) provém de um campo em arquivo de banco de dados.

Se eu a colocar de forma fixa dentro do programa, somente tirando as aspas inicial e final a matriz será produzida normalmente, como fiz na fase de testes.


EXEMPLO da variável a ser convertida para Matriz
Cnumeros := "{{00,02,28},{01,03,27},{02,04,26},{03,05,25},{04,06,24},{05,07,23},{06,08,22},{07,09,21},{08,10,20},{09,11,19},{10,12,18},{11,13,17},{12,14,16},{13,00,15},{00,16,14},{15,17,13},{16,18,12},{17,19,11},;
{18,20,10},{19,21,09},{20,22,08},{21,23,07},;
{22,24,06},{23,25,05},{24,26,04},{25,27,03},;
{26,28,02},{27,00,01}}"

Matriz multidimensionais - usando a função AADD

Enviado: 13 Mar 2015 12:00
por ANDRIL
Não entendi muito bem o que voce deseja, se for transformar a variavel cNumeros em uma Matriz, veja abaixo:

Código: Selecionar todos

Cnumeros := "{{00,02,28},{01,03,27},{02,04,26},{03,05,25},{04,06,24},{05,07,23},{06,08,22},{07,09,21},{08,10,20},{09,11,19},{10,12,18},{11,13,17},{12,14,16},{13,00,15},{00,16,14},{15,17,13},{16,18,12},{17,19,11},"
Cnumeros+="{18,20,10},{19,21,09},{20,22,08},{21,23,07},{22,24,06},{23,25,05},{24,26,04},{25,27,03},{26,28,02},{27,00,01}}"

priv aNumeros:=&cNumeros

for i= 1 to len(aNumeros)
? aNumeros[i]
?? aNumeros[i][1]
?? "|"
?? aNumeros[i][2]
?? "|"
?? aNumeros[i][3]
next
Boa sorte!

Matriz multidimensionais - usando a função AADD

Enviado: 13 Mar 2015 14:00
por Eolo
mas cada hora é um número e a matriz tem de ser dinâmica.
Se vc quer saber o tamanho de cada "sub-matriz", é só indexar pelo elemento desejado:

Código: Selecionar todos

mat:={{1,.T.,3},{4,5,6,"JOSE",8,9}}

? len(mat)     // -> 2 elementos dentro de MAT
? len(mat[1]) // -> 3 elementos dentro do elemento 1 de MAT
? len(mat[2]) // -> 6 elementos dentro do elemento 2 de MAT
E dá pra aninhar mais sub-elementos dentro de sub-elementos etc.

Matriz multidimensionais - usando a função AADD

Enviado: 13 Mar 2015 14:48
por billy1943
Obrigado, novamente, ao Andril e ao Eolo,

Ao Andril, resolvido pela sua sugestão, e que nem precisou usar a função AADD.

O "segredo" está na linha 4 !

Eu havia tentando de dentro do Dbase III resolver a questão com a macrosubstituição e dava certo, mas de dentro do Clipper, não dava, daí constar que havia tentado as funções AT(), RAT(), etc.

E ao Eolo, informo que a matriz vai ser sempre no formato acima, ou seja, a sub-matriz com 3 (três) elementos, mas valeu a dica, pois como sempre afirmei: "trabalhar com matrizes é ótimo, rápido, mas tem hora que funde a cuca".
Dou como exemplo o meu programa de Sudoku, que estou para mexer nele, mas falta-me coragem, porque o que trabalha com matriz não é mole, não...

MUITO OBRIGADO, aos colegas !

RESOLVIDO.

Matriz multidimensionais - usando a função AADD

Enviado: 14 Mar 2015 20:30
por JoséQuintas
Só como complemento...
Em alguns casos isto ajuda não só no Clipper, mas também no Harbour:

Código: Selecionar todos

x = &( variavel )