Página 1 de 1

É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 12:07
por ANDRIL
Pessoal procurei no fórum sobre o uso de ASORT(), vi vários exemplos, porém nenhum me serviu.

Tenho um Vetor:

Código: Selecionar todos

snomeArq[01]="01095331.SPO  VND:000382 Dt:11/11/2008-09:53 Op:FULANO          Mq:01"
snomeArq[02]="01105923.SPO  VND:000375 Dt:11/11/2008-10:59 Op:FULANO          Mq:01"
snomeArq[03]="01095325.SPO  VND:000426 Dt:11/11/2008-09:53 Op:FULANO          Mq:01"

Precisava classificar este array, usando o como indice ( VND:000382 ) sendo assim ficaria:

Código: Selecionar todos

snomeArq[02]="01105923.SPO  VND:000375 Dt:11/11/2008-10:59 Op:FULANO          Mq:01"
snomeArq[01]="01095331.SPO  VND:000382 Dt:11/11/2008-09:53 Op:FULANO          Mq:01"
snomeArq[03]="01095325.SPO  VND:000426 Dt:11/11/2008-09:53 Op:FULANO          Mq:01"
Pra isso usei:

Código: Selecionar todos

ASORT(snomeArq, {|x| substr(x,19,06)})
Não deu certo. Tem como fazer isso, o ASORT() aceita parte do elemento para classificação?

Ate+,

Re: É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 12:43
por Maligno

Código: Selecionar todos

ASORT(snomeArq,{|x,y|substr(x,19,06) < substr(y,19,06)})
Acho que assim deve resolver o problema. Observe que o bloco de código que ASort() recebe é o código que fará a comparação entre os elementos em dado momento da ordenação. Portanto, ele exige dois argumentos, arbitrariamente chamados de X e Y.

Re: É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 13:14
por ANDRIL
Maligno, curiosamente tambem não funcionou!

Resultaldo obtido:

Código: Selecionar todos

snomeArq[03]="01095325.SPO  VND:000426 Dt:11/11/2008-09:53 Op:FULANO          Mq:01"
snomeArq[01]="01095331.SPO  VND:000382 Dt:11/11/2008-09:53 Op:FULANO          Mq:01"
snomeArq[02]="01105923.SPO  VND:000375 Dt:11/11/2008-10:59 Op:FULANO          Mq:01"
Alguma outra idéia?

Ate+,

Re: É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 14:25
por gvc
ASort( <aArray>, [<nStart>], [<nCount>], [<bSort>] ) --> aArray


ASORT(snomeArq,,,{|x,y|substr(x,19,06) < substr(y,19,06)})

É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 14:31
por Pablo César
Tente desta forma então:

snomeArq:=ASORT(snomeArq,,,{ |x,y| val(substr(x,19,06)) < val(substr(y,19,06)) })

Re: É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 15:56
por Maligno
Deculpe. Esqueci das vírgulas. Agora dá certo. :)

Re: É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 15:58
por ANDRIL
Obrigado a todos, Pablo o segredo estava no val() conforme sua fórmula.
Problema resolvido e Agradecido.

Ate+

Re: É possível usar ASORT com SUBSTR para a classificação?

Enviado: 11 Nov 2008 16:01
por Maligno
Esse Val() não deveria fazer diferença, já que as strings dos números tem os mesmos tamanhos e estão alinhadas. Experimente tirar os Val(). Acredito que deve dar o mesmo resultado. O problema era só com as vírgulas.