Page 1 of 1

Una consulta sobre la función ASort

Posted: Sun May 24, 2020 4:27 am
by nanoespinoza
Estimados:

Una consulta sencilla sobre el funcionamiento de la función Asort. Pongo el siguiente ejemplo:

Tengo un arreglo con esta composición original:

aMatriz:={"HAWAI", "CALIFORNIA", "<Sin selección>", "1er. ESTADO", "NUEVA YORK", "WASHINGTON"}

Si pongo esta cadena de texto en filas en excel, y las ordeno, me da el siguiente resultado (Y ES EL QUE DESEO):

aMatriz:={"<Sin selección>", "1er. ESTADO", "CALIFORNIA", "HAWAI", "NUEVA YORK", "WASHINGTON"}

Pero usando la función ASort, me resulta esto:

aMatriz:={"1er. ESTADO", "<Sin selección>", "CALIFORNIA", "HAWAI","NUEVA YORK", "WASHINGTON"}

¿Porque y como lo puedo corregir?

Saludos

Fernando Espinoza A.

Re: Una consulta sobre la función ASort

Posted: Sun May 24, 2020 9:31 am
by Manuel Aranda
No sé si la solución es muy ortodoxa, pero si metes un espacio en blanco delante de " <Sin selección>" igual lo arreglas.

Re: Una consulta sobre la función ASort

Posted: Sun May 24, 2020 1:19 pm
by cnavarro
Fernando, intenta así ( con esto yo creo que tienes por donde meterle mano al tema ):

Code: Select all

#include "Fivewin.ch"

Function Main()

   local aMatriz:={"HAWAI", "CALIFORNIA", "<Sin selección>", "1er. ESTADO", "NUEVA YORK", "WASHINGTON"}
   ASort( aMatriz, , , { | x, y | Ordena( x, y ) } )
   XBrowse( aMatriz )


Return nil

Function Ordena( x, y )

   local lSw  := .F.
   if Asc( Left( x, 1 ) ) >= 65 .and. Asc( Left( y, 1 ) ) >= 65
      if x < y
         lSw  := .T.
      endif
   else
      if Asc( Left( y, 1 ) ) >= 65
         lSw  := .T.
      endif
   endif

Return lSw
 

Re: Una consulta sobre la función ASort

Posted: Sun May 24, 2020 8:30 pm
by nanoespinoza
Estimados

Gracias, funcionó perfecto (las 2 soluciones), aunque me quede con la de Cristóbal..

Saludos