Clipper On Line • Ver Tópico - Falha no aSort ou Descend ?

Falha no aSort ou Descend ?

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Falha no aSort ou Descend ?

Mensagempor asimoes » 04 Mar 2019 18:48

Peguei um erro no aSort, agora não sei se foi usando a função Descend

  aSort( aFiltro1 ,,, {|x,y| StrZero( 999999999999999.00 - x["VALOR"], 20, 2 ) < StrZero( 999999999999999.00 - y["VALOR"], 20, 2 ) } )

   ? "aFiltro1"
   ?
   For Each oElemento In aFiltro1
      ? oElemento["CNPJ_CPF"] + " " + Str( oElemento["ID"], 10 ) + " " + Transform( oElemento["VALOR"], "@E 999.99")
   Next
   
   ?
   ? "aFiltro2"
   ?
   aSort( aFiltro2 ,,, {|x,y| Descend( StrZero( x["VALOR"], 20, 2 ) ) < Descend( StrZero( y["VALOR"], 20, 2 ) ) } )
   
   For Each oElemento In aFiltro2
      ? oElemento["CNPJ_CPF"] + " " + Str( oElemento["ID"], 10 ) + " " + Transform( oElemento["VALOR"], "@E 999.99")
   Next


2019-03-04 18_38_53-Window.png
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Falha no aSort ou Descend ?

Mensagempor asimoes » 04 Mar 2019 19:33

Vi na documentação da função Descend que ela faz o descend parcial, diante disso vou usar StrZero( 999999999999999.00 - x["VALOR"], 20, 2 )
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Falha no aSort ou Descend ?

Mensagempor JoséQuintas » 05 Mar 2019 02:15

Descend() é compatível com Clipper, e com isso, gera problemas pra codepage diferente da padrão do Clipper.

FUNCTION MyDescend( cText )

   LOCAL cResult, acAscii := {}, nCont

   STATIC cFrom, cTo

   IF cFrom == NIL .OR. cTo == NIL
      FOR nCont = 1 TO 255
         Aadd( acAscii, Chr( nCont ) )
      NEXT
      ASort( acAscii )
      cFrom := cTo := ""
      FOR nCont = 1 TO 255
         cFrom += acAscii[ nCont ]
         cTo   += acAscii[ 256 - nCont ]
      NEXT
   ENDIF
   cResult := hb_StrReplace( cText, cFrom, cTo )

   RETURN cResult
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Falha no aSort ou Descend ?

Mensagempor asimoes » 05 Mar 2019 08:31

Descobri outra coisa

Assim funciona com 14 digitos ( até 99 tri ), mais do que isso a ordenação falha.

StrZero( 99999999999999.00 - x["VALOR"], 17, 2 )
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Falha no aSort ou Descend ?

Mensagempor JoséQuintas » 05 Mar 2019 08:44

Mas pera lá... acho que esquecemos de uma coisa...
Pelo menos pro Asort.

x > y
x < y

Só inverter o sinal.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Falha no aSort ou Descend ?

Mensagempor asimoes » 06 Mar 2019 08:53

Esse asort tem 3 campos
Ordem de cpf e fonte + ( valor do maior para o menor ).

CPF, FONTE e VALOR

x["CPF"] + x["FONTE"] + StrZero( 99999999999999.00 - x["VALOR"], 17, 2 )

O resultado do asort deve ser isso:

99999999999 100  100.00
99999999999 100   90.00
99999999999 100   80.00
99999999999 186   80.00
99999999999 186   70.00
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Falha no aSort ou Descend ?

Mensagempor JoséQuintas » 06 Mar 2019 09:38

Mais ou menos isto:

iif( x[ "CPF" ] == y[ "CPF" ], ;
     iif( x[ "FONTE" ] == y[ "FONTE" ], ;
     x[ "VALOR" ] > y[ "VALOR" ], x[ "FONTE" ] < y[ "FONTE" ] ), ;
    x[ "CPF" ] < y[ "CPF" ] )


Sempre me confundo no < ou >, dentro do asort

CPF menor vém na frente
Em CPF repetido, fonte menor vém na frente
Em Fonte repetido, Valor maior vém na frente
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Falha no aSort ou Descend ?

Mensagempor asimoes » 06 Mar 2019 11:40

Funcionou o seu código Quintas, obrigado.
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro