Modifica delle stringhe in un elencoSto creando una casella di riepilogo che utilizzo in uno script per selezionare i numeri di batch che voglio analizzare. Vorrei creare l'elenco dei numeri batch in base ai nomi dei file in una cartella. Non riesco a capire come modificare il nome del file in modo che sia solo il numero di batch.
Questo è l'aspetto dell'elenco dei nomi dei file
"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"
Voglio che la lista finisca così
"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"
Automazione e scriptingOrganizzazione dei contenutiMiscelazione e pulizia dei datiRi: Modificare le stringhe in un elencoCaro @ealindahl ,
i punti appartengono a valori mancanti, cioè la regex non ha trovato una corrispondenza.
Puoi rimuoverli in seguito o evitarli durante la generazione dell'elenco e devi modificare leggermente il ciclo.
Un modo semplice per rimuoverli in seguito è il seguente (primo modo tramite la manipolazione delle stringhe, secondo tramite loop through).
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);
Ri: Modificare le stringhe in un elencoGrazie Giorgio! Funziona davvero bene. Non ho mai usato regex prima e ho provato a fare qualche ricerca su Google per risolvere questo problema. Ho alcuni file spazzatura nella stessa cartella che non contengono numeri. quindi il nome di quei file non entra nell'elenco, ma il periodo sì. Come mi libero del periodo?
Sembra così {., ., ., ., ., ., ., "20131", "20132", "20133",}
Ri: Modificare le stringhe in un elencoQuesto approccio non utilizza un ciclo 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 );Ri: Modificare le stringhe in un elencoGrazie Jim.
La funzione Word è una funzione piacevole e facile da capire per tali scopi.
Un approccio ancora più generale potrebbe utilizzare regex,
quindi semplicemente sostituendo una riga di Jims Script con
exampleList[i] = regex(exampleList[i], "([0-9]+)", "\1")
cercherà la prima occorrenza di un numero.
Questo può essere utile quando i dati non sono puliti come in questo esempio. Regex è incredibilmente potente.
Ri: Modificare le stringhe in un elencoIl modo più semplice per farlo è usare la funzione 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 documentazione sulla funzione Word() è disponibile nell'indice di scripting.