** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Ordenar una array de un tipo
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoOrdenar una array de un tipo

 Responder Responder
Autor
Mensaje
fran01 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Julio/2017
Localización: españa
Estado: Sin conexión
Puntos: 12
Enlace directo a este mensaje Tema: Ordenar una array de un tipo
    Enviado: 23/Julio/2018 a las 14:53
Hola:

Tengo que guardar fechas y rutas de ficheros en una array.
He decidido crear un tipo que contenga los dos tipos de variable que necesito.


Type myType
    Ruta As String
    DataCon As Date
End Type

Dim myArray(100) As myType


Una vez cargada la array, necesito ordenar su contenido mediante DataCon. La posición de Ruta debe cambiar al igual que DataCon. Alguien sabe como hacerlo?


Muchas gracias.

Fran

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11092
Enlace directo a este mensaje Enviado: 23/Julio/2018 a las 16:19
Método burbuja. Comparas Datacon y cambias de posición Datacon y Ruta.

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3181
Enlace directo a este mensaje Enviado: 23/Julio/2018 a las 17:34
Hola.
Otra alternativa pasa por utilizar un recordset ado.
El siguiente ejemplo de trabajo crea un recordset( con 2 campos) le carga 50 valores y luego lo ordena por la fecha ascendente.

Public Sub ordenataula()
Dim nn As Long
Dim mirec As Object 'New ADODB.Recordset
Set mirec = CreateObject("adodb.recordset")
mirec.Fields.Append "ruta", 200, 255 ' adVarChar, 255
mirec.Fields.Append "datacon", 7 'adDate
mirec.Open
For nn = 1 To 50
mirec.AddNew
mirec.Fields("ruta") = "C:\dddd\aaaa\mifichero" & nn & ".xls"
mirec.Fields("datacon") = Date - nn
mirec.Update
Next
mirec.MoveFirst
MsgBox (mirec.Fields("ruta") & "---" & mirec.Fields("datacon"))
mirec.Sort = "[datacon] asc"
mirec.MoveFirst
MsgBox (mirec.Fields("ruta") & "---" & mirec.Fields("datacon"))
mirec.Close
Set mirec = Nothing
End Sub

Espero que al menos aporte otra alternativa a la propuesta por Jesús
Ya comentas.
Un saludo a todos

Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton
Estado: Sin conexión
Puntos: 3385
Enlace directo a este mensaje Enviado: 25/Julio/2018 a las 02:47
Aunque no se deben dar las cosas hechas, por hoy haré una excepción.

Option Explicit

Type myType
    Ruta As String
    DataCon As Date
End Type




Sub subGeneraFechasAleatorias()
Dim n As Integer
Dim myArray(100) As myType

    For n = 1 To 100
        myArray(n).DataCon = Now() - Int((2018 - 100 + 1) * Rnd + 100)
        myArray(n).Ruta = "Ruta " & n
    Next n
' aquí visualizar array, está DESordenado    

    SortArray myArray

' aquí visualizar array, está ordenado    

End Sub

Sub SortArray (arr() As myType)
    Dim arrAux As myType
    Dim i As Long
    Dim j As Long

    For j = 2 To UBound(arr)
        arrAux = arr(j)
        For i = j - 1 To 1 Step -1
            If (arr(i).DataCon <= arrAux.DataCon) Then GoTo mantener
                arr(i + 1) = arr(i)
        Next i
        i = 0
mantener:     arr(i + 1) = arrAux
    Next j
End Sub


Un saludo

Luis
Estos son mis principios. Si no le gustan... tengo otros
Arriba
fran01 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Julio/2017
Localización: españa
Estado: Sin conexión
Puntos: 12
Enlace directo a este mensaje Enviado: 26/Julio/2018 a las 12:44
Muchas gracias.

Fran
Arriba
fran01 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Julio/2017
Localización: españa
Estado: Sin conexión
Puntos: 12
Enlace directo a este mensaje Enviado: 26/Julio/2018 a las 13:02
Hola Luis:

Agradezco muchissimo tu ejemplo. Gracias por tu trabajo.
Es perfecto.

Te deseo un gran dia.

Fran
Arriba
fran01 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Julio/2017
Localización: españa
Estado: Sin conexión
Puntos: 12
Enlace directo a este mensaje Enviado: 26/Julio/2018 a las 13:07
Hola prga:

Te agradezco mucho tu ejemplo. Hacerlo con un recordset es muy util pero prefiero trabajarlo con arrays.

Gracias por tu trabajo.

Te deseo un gran dia.

Fran
Arriba
fran01 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 10/Julio/2017
Localización: españa
Estado: Sin conexión
Puntos: 12
Enlace directo a este mensaje Enviado: 26/Julio/2018 a las 13:07
Hola Jesús:

Gracias por tu suggerencia.

Te deseo un gran dia.

Fran
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4991
Enlace directo a este mensaje Enviado: 26/Julio/2018 a las 15:36
Entonces cerramos

Saludos.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable