Matriz multidimensionais - usando a função AADD

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Matriz multidimensionais - usando a função AADD

Mensagem 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}}"
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Matriz multidimensionais - usando a função AADD

Mensagem 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!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Matriz multidimensionais - usando a função AADD

Mensagem 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.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Matriz multidimensionais - usando a função AADD

Mensagem 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.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Matriz multidimensionais - usando a função AADD

Mensagem 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 )
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/
Responder