PDA

Ver la Versión Completa : [ CONSULTA ] Asignar resultados 'ls' a arrays


SmartPhoneLover
03/12/16, 21:01:32
Esta vez estoy teniendo problemas a la hora de listar archivos de un directorio con el comando 'ls'. Uso el comando ls porque éste me arroja los archivos directamente sin el resto de la ruta, de este modo me ahorro el tener que buscar y reemplazar dichas rutas, por nada, que es lo que quiero vamos: solo obtener los nombres de los archivos de un directorio.
El problema llega cuando pretendo asignar cada archivo localizado y listado por el comando ls a arrays. He intentado todo lo que se me ocurre pero no llego a ver como se podria hacer.
Además me gustaria ser capaz luego de modificar en serie todos los elementos de cada array, mediante la obción buscar y reemplazar, pero '%variable()' solo es para salida de datos, y si tento 50 arrays? No voy a ir buscando y reemplazando array por array!!!! (50 acciones, una por cada array)

WillyWeb
03/12/16, 23:34:24
Tienes una acción de Tasker que directamente genera un array con los nombres de los archivos de una carpeta, ¿la has probado?.

Y si eso no te vale, o prefieres usar el comando de consola "ls", siempre puedes convertir una cadena de ese tipo en una array con buscar y reemplazar usando como "separador" una línea en blanco. Creo que ya te conté en otro caso cómo se hacía. Creas una variable con una línea en blanco como valor y luego usas esa variable como separador.

Lo de buscar y reemplazar en todos los elementos de un array no debería ser complicado si primero usas "Variable Join" para unir todos los elementos del array en una cadena, haces la sustitución que quieras/necesites y luego separas la cadena de nuevo para regenerar el array.

danko9696
04/12/16, 17:46:18
Además me gustaria ser capaz luego de modificar en serie todos los elementos de cada array, mediante la obción buscar y reemplazar, pero '%variable()' solo es para salida de datos, y si tento 50 arrays? No voy a ir buscando y reemplazando array por array!!!! (50 acciones, una por cada array)
¿Te refieres a 50 arrays o un array con 50 elementos?

WillyWeb
04/12/16, 18:09:53
¿Te refieres a 50 arrays o un array con 50 elementos?

Yo he entendido 50 arrays con un número indefinido de elementos. :oh:

En cualquier caso, si esas son las necesidades de la aplicación pues tendrá que hacer las 50 acciones a no ser que la parte que quiere sustituir sea la mismo en todos los casos. Si es así se podría reducir un poco el número de acciones necesarias. :silbando:

danko9696
04/12/16, 18:28:22
Yo he entendido 50 arrays con un número indefinido de elementos. :oh:

En cualquier caso, si esas son las necesidades de la aplicación pues tendrá que hacer las 50 acciones a no ser que la parte que quiere sustituir sea la mismo en todos los casos. Si es así se podría reducir un poco el número de acciones necesarias. :silbando:
¿Pero 50 arrays, cada uno con un nombre de variable distinto?

Se puede tratar cada array como un elemento de otro array de nivel superior usando separadores distintos para cada nivel, por lo que no son necesarias 50 acciones. Y con la ventaja de que es muy escalable. Pudiendo manejar miles lo mismo que decenas y/o añadir más niveles con muy poco código adicional. Sin duda sería la mejor elección (aunque no fuese la más eficiente en este caso concreto) para coger práctica con arrays/bucles.

WillyWeb
04/12/16, 18:42:05
Es tontería dar vueltas al tema hasta que no esté perfectamente definido. Una vez que estén claros los requisitos ya se verá la mejor solución, aunque hacerlo con acciones de Tasker seguramente no será la mejor opción sabiendo que, en palabras de su autor, el procesado de array es muy poco eficiente. Y menos con bucles, que es otro de los puntos flojos de Tasker.

danko9696
04/12/16, 18:54:09
Es tontería dar vueltas al tema hasta que no esté perfectamente definido. Una vez que estén claros los requisitos ya se verá la mejor solución, aunque hacerlo con acciones de Tasker seguramente no será la mejor opción sabiendo que, en palabras de su autor, el procesado de array es muy poco eficiente. Y menos con bucles, que es otro de los puntos flojos de Tasker.
Por eso preguntaba si se trata realmente de 50 arrays, porque me parecen muchos para el tema en cuestión, pero quién sabe. Y el procesado de arrays es muy poco eficiente (en parte porque no son realmente arrays sino pseudoarrays) pero salvo que quiera ponerse con javascript/sqlite es la única forma de manejar convenientemente grandes cantidades de datos. Perder eficiencia puede compensar de sobra si ganas flexibilidad, escalabilidad, facilidad de mantenimiento y poder hacer copypaste para otros proyectos.

SmartPhoneLover
08/12/16, 13:15:34
Tienes una acción de Tasker que directamente genera un array con los nombres de los archivos de una carpeta, ¿la has probado?.

Te refieres a la acción suministrada por defecto de 'Lista Archivos'?
Si es así, es la opción que evito usar. Por eso paso a utilizar el comando ls.


Y si eso no te vale, o prefieres usar el comando de consola "ls", siempre puedes convertir una cadena de ese tipo en una array con buscar y reemplazar usando como "separador" una línea en blanco. Creo que ya te conté en otro caso cómo se hacía. Creas una variable con una línea en blanco como valor y luego usas esa variable como separador.

Mil gracias¡ Al aplicar tu metodología ya funciona perfectamente. ;)


Lo de buscar y reemplazar en todos los elementos de un array no debería ser complicado si primero usas "Variable Join" para unir todos los elementos del array en una cadena, haces la sustitución que quieras/necesites y luego separas la cadena de nuevo para regenerar el array.[/quote]

Exactamente lo que hice. Creo que esta haciendo lo que pretendo.

SmartPhoneLover
08/12/16, 13:23:00
¿Te refieres a 50 arrays o un array con 50 elementos?

Creo que me equivoqué con la terminología :sisi1:
Quise decir una array (%Fruta) con sus 50 elementos (%Fruta1 = Naranajas, %Fruta2 = Bananas, %Fruta3 = Fresas,...)

Nota: Lo de 50 elementos por array era simplemente por poner un ejemplo, ya que aveces puedo tener 1 o 2 o 5, o 60 o 100 o 250...

SmartPhoneLover
08/12/16, 13:25:08
Para quien desee seguir y ver donde uso todo esto, visitad el proyecto 'Grabado de llamadas', especificamente la funcionalidad de navegador interno del mismo.
Y para dejar más claro el tema, pues uso el comando ls para crear una lista de los archivos de la carpeta 'Entrante' o 'Saliente' del grabador. De este modo se puede visualizar una lista con todos los archivos de audio generados.