(21-10-2022, 01:56)Shordi escribió: Para manejo de nombres de archivos existe la clase file. Es lo más simple y mejor.
Vaya, no conocía esa posibilidad. Y más ideal como decís.
Luego estuve solucionando la clasificación de archivos por extensiones en la función indexar por extensiones.
Estuve probando entre funciones de cadena y la función Split, resultó que era más rápido con cadenas.
Se complicaba un poco usando funciones de cadena encadenadas pero es más rápido.
Cuando se crean expresiones que contienen funciones una dentro de otra se vuelve compleja la expresión,
por el tema de paréntesis. Siempre se debe comenzar desde el más interior.
Primero lo hago en partes y si veo que funciona, la voy anidando.
Usando cadenas queda así la función indexar por extensiones.
He comentado desde el paréntesis interior hasta llegar al último exterior.
Código:
Public Sub IndexarPorExtension(ctodos As Collection, extension As String) As Collection
Dim ctemp As New Collection
Dim aarchivos As String[]
Dim nom As String
Dim anom As String[]
Dim letra As String
For Each anom In ctodos
For Each nom In anom
'Obtener posición del punto. Obtener cadena desde el punto hasta el final. Comprobar que la cadena obtenida y la extensión concuerdan.
If RInStr(Mid(nom, RInStr(nom, ".")), "." & extension) <> 0 Then
letra = Left(nom, 1)
If Not ctemp.Exist(letra) Then
aarchivos = New String[]
ctemp[letra] = aarchivos
ctemp[letra].add(nom)
Else
ctemp[letra].add(nom)
Endif
Endif
Next
Next
Return ctemp
End
Con Split:
Con funciones de cadenas.
Lógicamente varía con cada ejecución. Siempre viendo que con las funciones de cadenas es más rápido.
Se necesitaría ejecutar muchas veces el test y hacer una media, si se quiere ver más.
He cambiado la función de obtener las extensiones de los archivos. Es mejor, naturalmente.
Pero observo que en el perfilado el tiempo que tarda no es muy distinto a la función original.
A veces no es cuestión de que una aplicación sea más rápida , es más de usar el método correcto como el caso de la clase File.
Los programadores buscamos una solución cuando se desconoce la existencia de otras posibilidades, en parte son cajas negras,
lo que conocemos como abstracción.
¿ Sabíais que la ventana de los resultados de perfilado se puede ir añadiendo una y otra según ejecutas la aplicación varias veces ?.
Subo el ejemplo con los cambios.
Saludos