Página 1 de 1

duvida com asort

Enviado: 02 Mai 2005 10:17
por clebermano
Ola pessoa bom dia.
Estou uma duvida na funcao asort()
tenho a seguinte matriz
aadd(Vmat1, str(codigo,13) + " " + left(nomeprod,25))
preciso organizar por orde de nome, em formato crescente "ALFACE,BATATA"ETC.
Agradeco desde ja.

Re: duvida com asort

Enviado: 02 Mai 2005 11:07
por Maligno
aadd(Vmat1, str(codigo,13) + " " + left(nomeprod,25))
preciso organizar por orde de nome, em formato crescente "ALFACE,BATATA"ETC.
Para que sua ordenadação especial seja implementada a contento, você só precisará limitar as strings de comparação. Assim, para ordenação ascendente da string parcial (posição 15, onde começa o nome do produto):

Código: Selecionar todos

ASort(VMat1,,,{|x,y|Right(x,25) < Right(y,25)})
Considerei que o nome do produto tem a largura fixa de 25 caracteres. Mas se tiver largura variável, troque os Right() por SubStr(), reparametrizando as posições.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 02 Mai 2005 12:23
por Toledo
Só corrigindo o exemplo do nosso amigo Maligno...

O correto é:

Código: Selecionar todos

ASort(VMat1,,,{|x,y|Right(x[1],25) < Right(y[1],25)})
Atenção: desconsidere esta mensagem - veja as demais mensagens abaixo...
Mensagem editada por Toledo em 02/05 - 16:30 hs

Abraços,

Enviado: 02 Mai 2005 14:28
por clebermano
obrigado a todos, funcionou chuchu beleza.
:xau :xau :xau :xau :xau :xau :xau :xau

Enviado: 02 Mai 2005 14:35
por Maligno
Toledo escreveu:Só corrigindo o exemplo do nosso amigo Maligno...
Corrigindo sua correção:

Como a matriz do nosso amigo é unidimensional, o exemplo que mostrei está correto. A sua correção é que está, conceitualmente, errada. Apesar do erro, não deve gerar erro de run-time.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 02 Mai 2005 14:47
por Jorge Adourian
Maligno escreveu:Apesar do erro, não deve gerar erro de run-time.
O Toledo está errado mesmo.

Mas me desculpe, isto gera erro de run-time SIM !!!

Enviado: 02 Mai 2005 16:01
por Maligno
isto gera erro de run-time SIM !!!
Você está certo. Portanto, sou eu quem pede desculpas pelo lapso.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 02 Mai 2005 16:21
por Toledo
Maligno,

Revendo o exemplo do Clebermano, notei que ele realmente utilizou uma matriz unidimensional, e sendo assim, a minha correção está completamente errada.

Como eu sempre que vou adicionar um novo elemento a uma matriz coloco o conteúdo do elemento entre { } (chaves), mesmo que sendo uma única dimensão, pressuni que a função ASORT() não iria fazer a ordenação corretamente.

Note que ele não usou { } ao adicionar o conteúdo na matriz...

Código: Selecionar todos

aadd(Vmat1, str(codigo,13) + " " + left(nomeprod,25)) 
Caso, ele tivesse usado as chaves, o meu exemplo estaria correto.

Abraços,

Enviado: 04 Mai 2005 11:17
por clebermano
Bom, eh que sempre usei matrizes unidimensionais, acho + facil, mas valeu a todos.obrigado, funicionou direitinho..
:xau :xau :xau :xau :xau :)) :xau :xau :xau :xau :xau :xau