Kann ich Contains() innerhalb von Match() verwenden?Ich muss eine Zeichenspalte durchsuchen, um zu sehen, ob jeder Zeilenwert bestimmte Zeichenfolgen enthält, und dann einen entsprechenden Indikatornamen/eine entsprechende Gruppe in der neuen Spalte erstellen (es wird nach ~14 bestimmten Zeichenfolgen gesucht).Ich bin mir ziemlich sicher, dass verschachteltes IF() ziemlich langsam wäre ...Ich habe Match() in der Vergangenheit verwendet, wenn ich exakte Zeichenfolgen abgleichen wollte, aber kann ich Platzhalter verwenden?
Ich habe * und % versucht, aber ohne Erfolg:
Match( :columnOfInterest,
"*StringA*", "String A",
"*StringB*", "String B",
"" )
Ich habe dann versucht, Contains() innerhalb von Match() zu verwenden, aber immer noch kein Glück:
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA"), "String A",
Contains(:columnOfInterest, "StringB"), "String B",
"" )
Ich sehe, dass „Contains“ einen numerischen Wert zurückgibt, also habe ich auch versucht, einen >-Vergleich hinzuzufügen und sogar NUM() einzuschließen:
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA") > 0, "String A",
Contains(:columnOfInterest, "StringB") > 0, "String B",
"" )
Und
Match( :columnOfInterest,
Num(Contains(:columnOfInterest, "StringA")) > 0, "String A",
Num(Contains(:columnOfInterest, "StringB")) > 0, "String B",
"" )
Jede Hilfe wird sehr geschätzt.Danke!
Betreff: Kann ich Contains() innerhalb von Match() verwenden?Das hat mein Problem gelöst. Assoziative Arrays habe ich völlig vergessen. Vielen Dank!Betreff: Kann ich Contains() innerhalb von Match() verwenden?JMP-Anfänger

Sie können ein assoziatives Array verwenden, um eine Nachschlagetabelle der Zeichenfolgen zu speichern, die Sie verschiedenen Zeichenfolgen zuordnen möchten.
Oben sind beispielsweise :searchTerms und :mappedTerms die Schlüssel und Werte eines solchen assoziativen Arrays. Im folgenden Code wird dieses Array der Variablen „lookup“ zugewiesen. In der endgültigen Formel für die RESULTS-zugeordnete Spalte sehen Sie, dass jede von der Regex gefundene Übereinstimmung als Argument für das Sucharray dient.
Nehmen Sie beispielsweise Zeile 1 in der obigen Tabelle. Das gefundene Ergebnis ist „Integra“ und das zugeordnete Ergebnis ist „lookup[„Accord“]“, also „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)) ) ) ) ) );
Im Anhang finden Sie die vollständige Beispieltabelle.
Betreff: Kann ich Contains() innerhalb von Match() verwenden?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Beachten Sie, dass „\1“ eigentlich keinen Unterschied macht, da wir nur ein Muster haben. Wenn es mehrere Klammern gäbe, könnte man tatsächlich „\1“ oder „\n“ haben, wobei n <= Anzahl der Muster ist. Siehe JMP-Onlinedokument ==> Reguläre Ausdrücke
Betreff: Kann ich Contains() innerhalb von Match() verwenden?Das macht alles Sinn, jetzt werde ich versuchen, die Dinge zu komplizieren ...
regex(test,"(ABC|DEF|GHI)","\1")
Kann ich eine andere Zeichenfolge als die übereinstimmende zurückgeben?
- Wenn „ABC“ gefunden wird, wird „Gruppe1“ zurückgegeben.
- Wenn „DEF“ gefunden wird, wird „Gruppe2“ zurückgegeben usw
oder ist das mit Regex nicht möglich?
Betreff: Kann ich Contains() innerhalb von Match() verwenden?Danke PBZ und Jim, Regex() funktioniert großartig und jetzt habe ich ein neues Tool, das ich beim Skripten verwenden kann! sehr geschätzt!
Betreff: Kann ich Contains() innerhalb von Match() verwenden?Regex ist der richtige Weg. Hier ist ein sehr einfaches Beispiel, das den gewünschten Mehrfachabgleich durchführt.Erweitern Sie es einfach mit den gesuchten Zeichenfolgen.Die gefundene Übereinstimmung wird zurückgegeben.
names default to here(1);
test="Answer is ABC";
TheMatch = regex(test,"(ABC|DEF|GHI)","\1");
Betreff: Kann ich Contains() innerhalb von Match() verwenden?JMP-Anfänger
Ich würde bedingte Anweisungen ganz vermeiden. Eine bessere Lösung ist die Verwendung von Regex. Angenommen, Ihre Suchbegriffe wären Automodelle, „Accord“, „Civic“ usw., dann kann eine Regex-Anweisung geschrieben werden, die besagt: „Treffen Sie EINEN der Begriffe“ . In JSL würde eine Spaltenformel hierfür wie folgt aussehen:
Regex( :columnOfInterest, "(Accord|Civic|Corolla|Dakota|Integra|Maxima|Ranger|S10)" );
Im Anhang finden Sie eine einfache Demodatei davon. Regex ist äußerst leistungsfähig beim String-Pattern-Matching. Es gibt zahlreiche Möglichkeiten, Teilwörter, Wortstämme usw. zuzuordnen. Ich hoffe, das hilft!
-PBZ