puis-je utiliser Contient() dans Match()Je dois rechercher une colonne de caractères pour voir si chaque valeur de ligne contient des chaînes spécifiques, puis créer un nom/groupe d'indicateur en conséquence dans la nouvelle colonne (il recherchera environ 14 chaînes spécifiques).Je suis presque sûr que IF() imbriqué serait assez lent ...J'ai utilisé Match() dans le passé lorsque je voulais faire correspondre des chaînes exactes, mais puis-je utiliser des caractères génériques ?
J'ai essayé * et % mais en vain :
Match( :columnOfInterest,
"*StringA*", "String A",
"*StringB*", "String B",
"" )
J'ai ensuite essayé d'utiliser Contient() dans Match() et toujours pas de chance :
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA"), "String A",
Contains(:columnOfInterest, "StringB"), "String B",
"" )
Je vois que Contient renvoie un numérique, j'ai donc également essayé d'ajouter > comparaison et même d'envelopper dans NUM() :
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA") > 0, "String A",
Contains(:columnOfInterest, "StringB") > 0, "String B",
"" )
et
Match( :columnOfInterest,
Num(Contains(:columnOfInterest, "StringA")) > 0, "String A",
Num(Contains(:columnOfInterest, "StringB")) > 0, "String B",
"" )
Toute aide est grandement appréciée.merci!
Re : puis-je utiliser Contient() dans Match()Cela a résolu mon problème. Totalement oublié les tableaux associatifs. Merci beaucoup!Re : puis-je utiliser Contient() dans Match()JMPdébutant

Vous pouvez utiliser un tableau associatif pour stocker une table de recherche des chaînes que vous souhaitez mapper à différentes chaînes.
Par exemple, ci-dessus :searchTerms et :mappedTerms sont les clés et les valeurs d'un tel tableau associatif. Dans le code ci-dessous, ce tableau est affecté à la variable "lookup". Dans la formule finale de la colonne mappée RESULTS, vous verrez que chaque correspondance trouvée par Regex sert d'argument pour le tableau de recherche.
par exemple, prenez la ligne 1 dans le tableau ci-dessus. Le résultat trouvé est "Integra" et le résultat mappé est lookup["Accord"] qui est "GroupA"
fmlaExpr = Expr(
If( Row() == 1,
lookUp = Associative Array( :searchTerms, :mappedTerms, Empty() );
vals = :searchTerms << get values;
doThis = Expr(
lookUp[Regex( :ColumnOfInterest, Char( "(" || Concat Items( vals, "|" ) || ")" ) )]
);
doThis;
,
doThis
)
);
Eval( Eval Expr( :RESULTS-mapped << set formula( Expr( Parse( Char( NameExpr(fmlaExpr)) ) ) ) ) );
Ci-joint le tableau complet de l'exemple.
Re : puis-je utiliser Contient() dans Match()<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Notez que le "\1" ne fait pas vraiment de différence puisque nous n'avons qu'un seul motif. S'il y avait plusieurs parenthèses, alors en effet on pourrait avoir "\1" ou "\n" où n est <= nombre de motifs. Voir la doc en ligne JMP ==> Expressions régulières
Re : puis-je utiliser Contient() dans Match()tout cela a du sens, maintenant je vais essayer de compliquer les choses...
regex(test,"(ABC|DEF|GHI)","\1")
puis-je renvoyer une chaîne différente de celle qui correspond ?
- si "ABC" est trouvé, retourne "group1",
- si "DEF" est trouvé, retourne "group2", etc.
ou n'est-ce pas possible avec regex?
Re : puis-je utiliser Contient() dans Match()merci PBZ et Jim, Regex() fonctionne très bien et maintenant j'ai un nouvel outil à utiliser lors de la création de scripts ! très appréciée!
Re : puis-je utiliser Contient() dans Match()Regex est la façon de faire, voici un exemple très simple qui fera la correspondance multiple que vous voulez.Développez-le simplement avec les chaînes que vous recherchez.Il renverra la correspondance trouvée.
names default to here(1);
test="Answer is ABC";
TheMatch = regex(test,"(ABC|DEF|GHI)","\1");
Re : puis-je utiliser Contient() dans Match()JMPdébutant
J'éviterais complètement les déclarations conditionnelles. Une meilleure solution consiste à utiliser Regex. Par exemple, supposons que vos termes de recherche soient des modèles de voiture, "Accord", "Civic", etc., une instruction Regex peut être écrite qui dit - "Correspond à N'IMPORTE QUEL des termes" . Dans JSL, une formule de colonne pour cela ressemblerait à :
Regex( :columnOfInterest, "(Accord|Civic|Corolla|Dakota|Integra|Maxima|Ranger|S10)" );
Ci-joint un simple fichier de démonstration de ceci. Regex est extrêmement puissant pour la correspondance des modèles de chaînes. Il existe de nombreuses options pour faire correspondre des mots partiels, des radicaux de mots, etc. J'espère que cette aide !
-PBZ