Modifica delle stringhe in un elencoSto creando una casella di riepilogo che utilizzo in uno script per selezionare i numeri di lotto che voglio analizzare. Vorrei creare l'elenco dei numeri di lotto 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"
ScriptingRi: Modifica delle 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 dello script.
Ri: Modifica delle stringhe in un elencoGrazie, Jim.
La funzione Word è una funzione piacevole e di facile comprensione per tali scopi.
Un approccio ancora più generale potrebbe essere l'uso di espressioni regolari,
quindi semplicemente sostituendo una riga di Jims Script con
exampleList[i] = regex(exampleList[i], "([0-9]+)", "\1")
cercherà la prima occorrenza di un numero.
Può essere utile quando i dati non sono così puliti come in questo esempio. Regex è incredibilmente potente.
Ri: Modifica delle 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: Modifica delle stringhe in un elencoGrazie Georg! Funziona davvero bene. Non ho mai usato le espressioni regolari prima e ho provato a cercare su Google per risolvere questo problema. Ho alcuni file spazzatura nella stessa cartella che non contengono numeri. quindi il nome di quei file non compare nell'elenco, ma il punto sì. Come mi sbarazzo del ciclo?
Sembra che questo {.,.,.,.,.,.,., "20131", "20132", "20133",}
Ri: Modifica delle stringhe in un elencocaro @ealindahl ,
i periodi appartengono a valori mancanti, ovvero la regex non ha trovato una corrispondenza.
Puoi rimuoverli dopo le parole o evitarli durante la generazione dell'elenco e modificare leggermente il ciclo.
Un modo semplice per rimuoverle è il seguente (primo modo tramite manipolazione di 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);