Edición de cadenas en una listaEstoy creando un cuadro de lista que uso en un script para seleccionar los números de lote que quiero analizar. Me gustaría hacer la lista de números de lote en función de los nombres de archivo en una carpeta. No puedo averiguar cómo editar el nombre del archivo para que sea solo el número de lote.
Así es como se ve la lista de nombres de archivos
"data_20229.csv", "data_20230.csv", "data_20231.csv", "data_20232.csv",
"data_20236.csv", "data_20237.csv", "data_20238.csv", "data_20239.csv",
"data_20240.csv", "data_20241.csv", "data_20242.csv", "data_20243.csv",
"data_20244.csv", "data_20245.csv", "data_20247.csv", "data_20248.csv",
"data_20251.csv", "data_20252.csv", "data_20253.csv", "data_20254.csv",
"data_20255.csv", "data_20256.csv", "data_20257.csv", "data_20258.csv",
"data_20259.csv", "data_20260.csv", "data_20261.csv", "data_20262.csv",
"data_20263.csv", "data_20264.csv", "data_20265.csv", "data_20266.csv",
"data_20267.csv", "data_20268.csv", "data_20269.csv", "data_20270.csv"
Quiero que la lista termine así.
"20229", "20230", "20231", "20232", "20233", "20234", "20235", "20236",
"20237", "20238", "20239", "20240", "20241", "20242", "20243", "20244", "20245",
"20246", "20247", "20248", "20249", "20250", "20251", "20252", "20253", "20254",
"20255", "20256", "20257", "20258", "20259", "20260", "20261", "20262", "20263",
"20264", "20265", "20266", "20267", "20268", "20269", "20270"
secuencias de comandosRe: Editar cadenas en una listaEstimado @ealindahl ,
los períodos pertenecen a valores faltantes, es decir, la expresión regular no encontró una coincidencia.
Puede eliminarlos después de las palabras o evitarlos durante la generación de la lista, y tiene que cambiar el ciclo ligeramente.
Una manera fácil de eliminarlos después de las palabras es la siguiente (primera forma a través de la manipulación de cadenas, segunda a través de un bucle).
BR
names default to here(1);
list = {., ., ., ., ., ., ., "20131", "20132", "20133"};
new_list = parse(substitute(char(list),".,", ""));
show (list);
show (new_list);
new_list={};
for (i=1, i<= n items(list), i++,
if (!is missing(list[i]), new_list = insert(new_list, list[i]));
);
show(new_list);
Re: Editar cadenas en una lista¡Gracias Jorge! Eso funciona muy bien. Nunca antes había usado expresiones regulares y traté de buscar en Google para resolver este problema. Tengo algunos archivos basura en la misma carpeta que no contienen ningún número. por lo tanto, el nombre de esos archivos no aparece en la lista, pero sí el punto. ¿Cómo me deshago del período?
Tiene este aspecto {., ., ., ., ., ., ., "20131", "20132", "20133",}
Re: Editar cadenas en una listaEste enfoque no utiliza un bucle for.
Names Default To Here( 1 );
exampleList = {"data_20229.csv", "data_20230.csv", "data_20231.csv",
"data_20232.csv", "data_20236.csv", "data_20237.csv", "data_20238.csv",
"data_20239.csv", "data_20240.csv", "data_20241.csv", "data_20242.csv",
"data_20243.csv", "data_20244.csv", "data_20245.csv", "data_20247.csv",
"data_20248.csv", "data_20251.csv", "data_20252.csv", "data_20253.csv",
"data_20254.csv", "data_20255.csv", "data_20256.csv", "data_20257.csv",
"data_20258.csv", "data_20259.csv", "data_20260.csv", "data_20261.csv",
"data_20262.csv", "data_20263.csv", "data_20264.csv", "data_20265.csv",
"data_20266.csv", "data_20267.csv", "data_20268.csv", "data_20269.csv",
"data_20270.csv"};
str = char(examplelist);
newstr = substitute(str, "data_", "", ".csv", "");
new_list = parse(newstr);
show( new_list );Re: Editar cadenas en una listaGracias, Jim.
La función de Word es una función agradable y fácil de entender para tales fines.
Un enfoque aún más general puede ser el uso de expresiones regulares,
simplemente reemplazando una línea de Jims Script por
exampleList[i] = regex(exampleList[i], "([0-9]+)", "\1")
buscaría la primera aparición de un número.
Esto puede ser útil cuando los datos no están tan limpios como en este ejemplo. Regex es increíblemente poderoso.
Re: Editar cadenas en una listaLa forma más fácil de hacer esto es usar la función Word().
Names Default To Here( 1 );
exampleList = {"data_20229.csv", "data_20230.csv", "data_20231.csv",
"data_20232.csv", "data_20236.csv", "data_20237.csv", "data_20238.csv",
"data_20239.csv", "data_20240.csv", "data_20241.csv", "data_20242.csv",
"data_20243.csv", "data_20244.csv", "data_20245.csv", "data_20247.csv",
"data_20248.csv", "data_20251.csv", "data_20252.csv", "data_20253.csv",
"data_20254.csv", "data_20255.csv", "data_20256.csv", "data_20257.csv",
"data_20258.csv", "data_20259.csv", "data_20260.csv", "data_20261.csv",
"data_20262.csv", "data_20263.csv", "data_20264.csv", "data_20265.csv",
"data_20266.csv", "data_20267.csv", "data_20268.csv", "data_20269.csv",
"data_20270.csv"};
For( i = 1, i <= N Items( exampleList ), i++,
exampleList[i] = Word( 2, exampleList[i], "_." )
);
show( exampleList );
La documentación sobre la función Word() se puede encontrar en el índice de secuencias de comandos.