FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ASort
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
ASort
Posted: 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 (fw): Select all Collapse
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/
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: ASort
Posted: Thu May 12, 2022 01:21 PM

nada aun?

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: ASort
Posted: 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 (fw): Select all Collapse
#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

Continue the discussion