ASort

ASort

Postby goosfancito » Tue May 10, 2022 10:57 pm

Hola.
La idea de este codigo es que dada un array lo ordene por fecha de cada "grupo" de "nIdPadre", si lo pueden ejecutar
van a ver que la primera vez ordena bien para los nIdPadre == 0, pero despues toma bien desde donde tiene que comenzar "nInicio" dado por el nIdPadre pero calcula mal hasta donde tiene que ordenar, el "nFInal" me pasó lo mismo con un codigo anterior similar a esto usando aScan, no se si son por los => o que.
Podrian ayudarme?

Code: Select all  Expand view
FUNCTION prueba()
   LOCAL aDatos := { }
   LOCAL nInicio, nFinal

   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "01/8/1020", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "01/8/1011", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "03/7/1008", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 2, "dFecha" => "06/8/1020", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 2, "dFecha" => "01/10/2220", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 4, "dFecha" => "15/8/1008", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 5, "dFecha" => "10/8/2025", "nHitem" => 0 } } )

   nInicio := 1
   DO WHILE .T.
      nFinal := AScan( aDatos, { | xCelda | xCelda[ 2 ][ "nIdPadre" ] != aDatos[ nInicio ][ 2 ][ "nIdPadre" ] } )
      XBROWSER aDatos

      aDatos := ASort( aDatos, nInicio, nFinal - 1, { | x, y | CToD( x[ 2 ][ "dFecha" ] ) < CToD( y[ 2 ][ "dFecha" ] ) } )
      XBROWSER aDatos TITLE "desde: " + Str(nInicio) + " hasta: " + Str(nFinal)
      nInicio := nFinal
   ENDDO

   RETURN ( NIL )
 


Gracias
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: ASort

Postby goosfancito » Thu May 12, 2022 1:21 pm

nada aun?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: ASort

Postby Antonio Linares » Thu May 12, 2022 11:22 pm

Querido Gustavo,

Aqui lo tienes: (lo he desordenado más aún para que se vea que funciona). Primero ordeno por nIdPadre y luego ordeno por fechas para padres iguales
Code: Select all  Expand view
#include "FiveWin.ch"

FUNCTION Main()

   LOCAL aDatos := { }

   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 2, "dFecha" => "06/8/1020", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "01/8/1020", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "03/7/1008", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 5, "dFecha" => "10/8/2025", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 2, "dFecha" => "01/10/2220", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "01/8/1011", "nHitem" => 0 } } )
   AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 4, "dFecha" => "15/8/1008", "nHitem" => 0 } } )

   aDatos = ASort( aDatos,,, { | x, y | x[ 2 ][ "nIdPadre" ] < y[ 2 ][ "nIdPadre" ] } )
   aDatos = ASort( aDatos,,, { | x, y | x[ 2 ][ "nIdPadre" ] == y[ 2 ][ "nIdPadre" ] .and. ;
                                        CToD( x[ 2 ][ "dFecha" ] ) < CToD( y[ 2 ][ "dFecha" ] ) } )
   XBROWSER aDatos

RETURN NIL
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41401
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 46 guests