Falha no aSort ou Descend ?

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

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Falha no aSort ou Descend ?

Mensagem por asimoes »

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

Código: Selecionar todos

  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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Falha no aSort ou Descend ?

Mensagem por asimoes »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Falha no aSort ou Descend ?

Mensagem por JoséQuintas »

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

Código: Selecionar todos

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Falha no aSort ou Descend ?

Mensagem por asimoes »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Falha no aSort ou Descend ?

Mensagem por JoséQuintas »

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Falha no aSort ou Descend ?

Mensagem por asimoes »

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:

Código: Selecionar todos

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Falha no aSort ou Descend ?

Mensagem por JoséQuintas »

Mais ou menos isto:

Código: Selecionar todos

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 mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Falha no aSort ou Descend ?

Mensagem por asimoes »

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)
Responder