Editar cadenas en una listaEstoy creando un cuadro de lista que utilizo en un script para seleccionar los números de lote que quiero analizar. Me gustaría hacer la lista de números de lote según los nombres de archivo en una carpeta. No puedo entender 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 acabe 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"
ScriptingRe: editar cadenas en una listaLa forma más sencilla de hacerlo es utilizar 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 Scripting Index.
Re: editar cadenas en una listaGracias, Jim.
La función Word es una función agradable y fácil de entender para tales fines.
Un enfoque aún más general puede estar usando expresiones regulares,
así que 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 son tan limpios como en este ejemplo. Regex es increíblemente poderoso.
Re: editar cadenas en una listaEste enfoque no usa 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 lista¡Gracias Georg! Eso funciona muy bien. Nunca antes había usado expresiones regulares e intenté buscar en Google para resolver este problema. Tengo algunos archivos basura en la misma carpeta que no contienen ningún número. por lo que el nombre de esos archivos no aparece en la lista, pero el punto es. ¿Cómo me deshago del período?
Tiene este aspecto {.,.,.,.,.,.,., "20131", "20132", "20133",}
Re: editar cadenas en una listaEstimado @ealindahl ,
los puntos pertenecen a los valores perdidos, es decir, la expresión regular no encontró una coincidencia.
Puede eliminarlas posteriores, o evitarlas durante la generación de listas, y debe cambiar el ciclo ligeramente.
Una forma fácil de eliminarlas posteriores es la siguiente (primera forma mediante manipulación de cadenas, segunda vía 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);