posso usare Contains() all'interno di Match()Devo cercare una colonna di caratteri per vedere se ogni valore di riga contiene stringhe specifiche e quindi creare un nome/gruppo di indicatori di conseguenza nella nuova colonna (cercherà ~ 14 stringhe specifiche).Sono abbastanza sicuro IF() nidificato sarebbe piuttosto lento ...Ho usato Match() in passato quando volevo abbinare stringhe esatte, ma posso usare i caratteri jolly?
Ho provato * e % ma senza successo:
Match( :columnOfInterest,
"*StringA*", "String A",
"*StringB*", "String B",
"" )
Ho quindi provato a utilizzare Contains() all'interno di Match() e ancora senza fortuna:
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA"), "String A",
Contains(:columnOfInterest, "StringB"), "String B",
"" )
Vedo che Contains restituisce un valore numerico, quindi ho anche provato ad aggiungere> confronto e persino a racchiudere in NUM():
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA") > 0, "String A",
Contains(:columnOfInterest, "StringB") > 0, "String B",
"" )
E
Match( :columnOfInterest,
Num(Contains(:columnOfInterest, "StringA")) > 0, "String A",
Num(Contains(:columnOfInterest, "StringB")) > 0, "String B",
"" )
Qualsiasi aiuto è molto apprezzato.Grazie!
Re: posso usare Contains() all'interno di Match()Questo ha risolto il mio problema. Completamente dimenticato degli array associativi. Molte grazie!Re: posso usare Contains() all'interno di Match()JMPprincipiante

È possibile utilizzare un array associativo per memorizzare una tabella di ricerca delle stringhe che si desidera mappare a stringhe diverse.
Ad esempio, sopra :searchTerms e :mappedTerms sono le chiavi ei valori di tale array associativo. Nel codice seguente, questo array è assegnato alla variabile "ricerca". Nella formula finale per la colonna mappata RISULTATI, vedrai che ogni corrispondenza trovata da Regex funge da argomento per l'array di ricerca.
es. Prendi la riga 1 nella tabella sopra. Il risultato trovato è "Integra" e il risultato mappato è lookup["Accord"] che è "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)) ) ) ) ) );
In allegato la tabella di esempio completa.
Re: posso usare Contains() all'interno di Match()<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Nota che "\1" in realtà non fa differenza poiché abbiamo solo 1 modello. Se ci fossero più parentesi, allora in effetti si potrebbe avere "\1" o "\n" dove n è <= numero di modelli. Vedere il documento online di JMP ==> Espressioni regolari
Re: posso usare Contains() all'interno di Match()tutto questo ha un senso, ora cercherò di complicare le cose...
regex(test,"(ABC|DEF|GHI)","\1")
posso restituire una stringa diversa da quella corrispondente?
- se viene trovato "ABC", restituire "gruppo1",
- se viene trovato "DEF", restituisce "group2", ecc
o non è possibile con regex?
Re: posso usare Contains() all'interno di Match()grazie PBZ e Jim, Regex() funziona alla grande e ora ho un nuovo strumento da usare durante lo scripting! molto apprezzato!
Re: posso usare Contains() all'interno di Match()Regex è il modo di fare, ecco un esempio molto semplice che farà la corrispondenza multipla che desideri.Basta espanderlo con le stringhe che stai cercando.Restituirà la corrispondenza che trova.
names default to here(1);
test="Answer is ABC";
TheMatch = regex(test,"(ABC|DEF|GHI)","\1");
Re: posso usare Contains() all'interno di Match()JMPprincipiante
Eviterei del tutto affermazioni condizionali. Una soluzione migliore è usare Regex. Ad esempio, supponiamo che i termini di ricerca siano modelli di auto, "Accordo", "Civic", ecc., è possibile scrivere un'istruzione Regex che dica: "Abbina QUALSIASI dei termini" . In JSL, una formula di colonna per questo sarebbe simile a:
Regex( :columnOfInterest, "(Accord|Civic|Corolla|Dakota|Integra|Maxima|Ranger|S10)" );
In allegato è un semplice file demo di questo. Regex è estremamente potente per la corrispondenza del modello di stringa. Esistono numerose opzioni per abbinare parole parziali, radici di parole, ecc. Spero che questo ti aiuti!
-PBZ