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: 1309
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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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