Modification de chaînes dans une listeJe crée une liste déroulante que j'utilise dans un script pour sélectionner les numéros de lot que je souhaite analyser. Je voudrais faire la liste des numéros de lot en fonction des noms de fichiers dans un dossier. Je n'arrive pas à comprendre comment modifier le nom du fichier pour qu'il ne soit 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 finisse 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"
Automatisation et scriptOrganisation du contenuFusion et nettoyage des donnéesRe : Modifier des chaînes dans une listeCher @ealindahl ,
les périodes appartiennent à des valeurs manquantes, c'est-à-dire que la regex n'a pas trouvé de correspondance.
Vous pouvez les supprimer après, ou les éviter lors de la génération de la liste, et devez modifier légèrement la boucle.
Un moyen simple de les supprimer des postfaces est le suivant (première via la manipulation de chaîne, seconde 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);
Re : Modifier des chaînes dans une listeMerci Georg! Cela fonctionne très bien. Je n'ai jamais utilisé 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 la période l'est. Comment puis-je me débarrasser de la période?
Il ressemble à ceci {., ., ., ., ., ., ., "20131", "20132", "20133",}
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 Jim.
La fonction Word est une fonction agréable et facile à comprendre à ces fins.
Une approche encore plus générale peut utiliser regex,
donc simplement en remplaçant 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 listeLa façon la plus simple de le faire est d'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 des scripts.