Erreur JSL Pas assez d'arguments dans l'évaluation de 'Contient'J'ai une liste de "noms de fichiers" et je souhaite créer une sous-liste uniquement de ceux dont les noms contiennent/se terminent par "_2020". J'utilise un Regex pour sélectionner ces fichiers : "_\d{4}".Cependant, j'obtiens une erreur "Pas assez d'arguments".
Si je teste les ListIDs, j'obtiens la liste attendue des noms de fichiers, elle n'est pas vide. J'apprécierai tous les pointeurs sur la façon de réparer mon script.
L'erreur de journal est : pas assez d'arguments dans l'accès ou l'évaluation de 'Contient' , Contient/*###*/(Regex( Char( ListIDs[i] ), "_\d{4}" ))
Show (ListIDs);<BR />ListIDs = {"2020-06","practice", "file1_2020", "file2_2020"}<BR /><BR />SelectedIDs = {};
For (i = 1, i <= N Items (ListIDs), i++,
If (Contains(Regex(Char(ListIDs[i]), "_\d{4}")),
Insert Into (SelectedIDs, i);
);
);
N Items (SelectedIDs);
Print(SelectedIDs);ScriptRe : Erreur JSL Pas assez d'arguments dans l'évaluation de 'Contient'Salut Mark,
Merci beaucoup, j'adore votre solution.Je suis toujours étonné quand la solution est une expression négative.
comme " Not( Manquant( Regex( ListIDs[i], "_\d{4}" ) ) ".
Re : Erreur JSL Pas assez d'arguments dans l'évaluation de 'Contient'ListIDs[SelectedIDs];
Re : Erreur JSL Pas assez d'arguments dans l'évaluation de 'Contient'Je pense que vous pouvez simplifier le test. Vous n'avez pas besoin de Contient() et son utilisation est problématique lorsque son premier argument est une valeur manquante. Cette modification utilise directement le résultat de la fonction Regex(). (J'ai reformaté le script pour rendre sa structure plus facile à voir.)
ListIDs = { "2020-06", "practice", "file1_2020", "file2_2020" };
Show( ListIDs );
SelectedIDs = {};
For( i = 1, i <= N Items (ListIDs), i++,
If(
Not( Is Missing( Regex( ListIDs[i], "_\d{4}" ) ) ),
Insert Into( SelectedIDs, i );
);
);
Print( SelectedIDs );Re : Erreur JSL Pas assez d'arguments dans l'évaluation de 'Contient'Salut,
J'ai décidé de modifier le script et d'utiliser la fonction Regex Match.Celui-ci m'a rapproché de mon objectif.Celui-ci renvoie la position sur la liste des noms de fichiers attendus.Comment puis-je obtenir les "Noms" et non leurs positions.
ListIDs = {"2019-11", "2020-06", "file1_2020", "file2_2020"};
SelectedIDs = {};
For (i = 1, i <= N Items (ListIDs), i++,
If ((Regex Match (Char(ListIDs[i]), "_\d{4}") !={}),
Insert Into (SelectedIDs, i);
);
);
N Items (SelectedIDs);
Print(SelectedIDs);Re : Erreur JSL Pas assez d'arguments dans l'évaluation de 'Contient'Salut Mark,
Le deuxième argument est-il le "délimiteur" ? J'aurais pensé que ce serait "," pas "2020".Le but de la Regex est de ne sélectionner que les fichiers qui ont "_2020" ou dans le futur "_2021", "_2021" etc. Désolé si je ne m'explique pas.
Re : Erreur JSL Pas assez d'arguments dans l'évaluation de 'Contient'Vous avez besoin du deuxième argument de la fonction Contient() pour désigner la chaîne cible. Comme ça:
Show (ListIDs);ListIDs = {"2020-06","practice", "file1_2020", "file2_2020"}SelectedIDs = {};
For (i = 1, i <= N Items (ListIDs), i++,
If (Contains(Regex(Char(ListIDs[i]), "_\d{4}"), "2020"),
Insert Into (SelectedIDs, i);
);
);
N Items (SelectedIDs);
Print(SelectedIDs);