Recherche de valeurs dans une listeSi j'ai une liste :
Liste = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) } ;
Mais la position des noms est toujours différente pour différentes tables,
Liste = {Henry(1,2), Robert(3,4), Kai(13, . ), John( . ,6) } ;
et parfois certains noms manquent aussi.
Liste = {Henri(1,2), Robert(3,4)} ;
Je sais que nous pouvons utiliser Contient(Liste, Liste[1]) mais de cette façon, nous considérons la position des valeurs dans une liste. Je veux savoir s'il existe un moyen de rechercher des chaînes comme "Henry" et d'extraire (1,2) pour Henry, et d'enregistrer 1 comme une variable et 2 comme une autre. Merci
Re : Trouver des valeurs dans une listeHé, merci, je l'ai fait fonctionner en utilisant regex.@vince_faller
Re : Trouver des valeurs dans une listeCela devrait faire ce que vous voulez.
Names Default to here(1);
Extract Expr({Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) }, Henry(Wild(), Wild()));
//or for a more complete answer
l = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
extracted = Eval(Substitute(
Expr(
Extract Expr(DV_LIST, Henry(WildList()));
),
Expr(DV_LIST), nameexpr(l)
));
first = Arg(extracted, 1);
second = Arg(extracted, 2);Re : Trouver des valeurs dans une listeSalut @Aam_jmp ,
Suivi de @uday_guntupalli la suggestion d'utiliser des expressions régulières, voici un script simple utilisant Contient() qui fonctionnera de manière similaire et stockera les valeurs dans var1 et var2.La variable "found" est utilisée pour quitter la boucle plus tôt si le nom est trouvé, ou pour afficher un message indiquant que la chaîne de recherche n'a pas été trouvée dans la liste tout en définissant var1 et var2 sur missing.
search_str = "Henry";
found = 0;
for(i = 1, i <= N Items(MyList), i++,
temp = char(MyList[i]);
If(Contains(temp,search_str) > 0,
var1 = num(word(2,temp,"(),"));
var2 = num(word(3,temp,"(),"));
found = 1;
);
if(found, break());
if(i == N Items(MyList) & !found,
Print("Search term not found in the list.");
var1 = .;
var2 = .;
)
);Re : Trouver des valeurs dans une liste@Aam_jmp ,
Vous pouvez utiliser Regex pour trouver la chaîne que vous voulez. Votre terme de recherche doit être construit pour couvrir un éventail aussi large que vous le souhaitez et la puissance des expressions régulières est débloquée par la façon dont vous pouvez construire votre terme de recherche.
L'exemple ci-dessous couvre la recherche uniquement pour le terme "Henry"
Clear Log(); Clear Globals();
MyList = List = {Henry(1,2), Robert(3,4), John( . ,6), Kai(13, . ) };
SelInd = {};
for(i = 1, i <= N Items(MyList), i++,
If(!IsMissing(Regex(Char(MyList[i]),"Henry")),
Insert Into(SelInd,i);
);
);