duvida com asort

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

duvida com asort

Mensagem 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.
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: duvida com asort

Mensagem 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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem 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,
Editado pela última vez por Anonymous em 02 Mai 2005 16:43, em um total de 1 vez.
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

Mensagem por clebermano »

obrigado a todos, funcionou chuchu beleza.
:xau :xau :xau :xau :xau :xau :xau :xau
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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
Jorge Adourian
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 05 Jul 2004 23:38
Localização: São Paulo-SP-Brasil
Contato:

Mensagem 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 !!!
Até...
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

Mensagem 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
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
Responder