Modifier des chaînes dans une listeJe crée une listbox que j'utilise dans un script pour sélectionner les numéros de lots que je souhaite analyser. Je voudrais faire la liste des numéros de lot en fonction des noms de fichiers dans un dossier. Je ne peux pas comprendre comment modifier le nom du fichier pour n'être que le numéro de lot.
Voici à quoi ressemble la liste des noms de fichiers
"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"
Je veux que la liste se termine comme ça
"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: Modifier des chaînes dans une listeLe moyen le plus simple de procéder consiste à utiliser la fonction 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 documentation sur la fonction Word () se trouve dans l'index de script.
Re: Modifier des chaînes dans une listeMerci, Jim.
La fonction Word est une fonction agréable et facile à comprendre à ces fins.
Une approche encore plus générale Peut-être utiliser regex,
il suffit donc de remplacer une ligne de Jims Script par
exampleList[i] = regex(exampleList[i], "([0-9]+)", "\1")
rechercherait la première occurrence d'un nombre.
Cela peut être utile lorsque les données ne sont pas aussi propres que dans cet exemple. Regex est incroyablement puissant.
Re: Modifier des chaînes dans une listeCette approche n'utilise pas de boucle 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: Modifier des chaînes dans une listeMerci Georg! Cela fonctionne vraiment bien. Je n'ai jamais utilisé de regex auparavant et j'ai essayé de faire quelques recherches sur Google pour résoudre ce problème. J'ai des fichiers indésirables dans le même dossier qui ne contiennent aucun numéro. donc le nom de ces fichiers n'entre pas dans la liste, mais le point l'est. Comment puis-je me débarrasser des règles?
Cela ressemble à ceci {.,.,.,.,.,.,., "20131", "20132", "20133",}
Re: Modifier des chaînes dans une listechère @ealindahl ,
les périodes appartiennent à des valeurs manquantes, c'est-à-dire que l'expression régulière n'a pas trouvé de correspondance.
Vous pouvez les supprimer ou les éviter lors de la génération de liste et devoir modifier légèrement la boucle.
Un moyen simple de les supprimer est le suivant (première méthode via la manipulation de chaînes, deuxième via une boucle).
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);