Spaltensuche mithilfe einer Liste von TeilzeichenfolgenIch versuche, Zeilen aus einer definierten Liste von Teilzeichenfolgen abzurufen, in denen der Wert übereinstimmt. Beispiel unten.
Der Teilstring, der mich interessiert, ist entweder „aaa“ oder „aa bb“. Ich habe mit der folgenden JSL begonnen. Im Idealfall ist das Ergebnis [1,2,4,5,7,8,11]. Das folgende Skript konnte alles bis auf das letzte (11) abrufen. Dennoch gibt es vielleicht auch elegantere Lösungen als die, die ich habe. Schätzen Sie die Hilfe!

names default to here(1);
keys_list = {"aaa", "aa bb"};
dt = current data table();
Row_list = dt <<GET rows="" where=""></GET>Automatisierung und SkripterstellungBetreff: Spaltensuche mithilfe einer Liste von TeilzeichenfolgenIch habe mein Skript aktualisiert, um dies zu berücksichtigen.Es ist nur ein `.`-Platzhalter. Möglicherweise möchten Sie Ihren Platzhalter genauer angeben.Normalerweise ist es nicht das Beste, einfach alles zuzulassen.Vor allem, wenn das nicht das ist, was Sie wirklich wollen.
Betreff: Spaltensuche mithilfe einer Liste von TeilzeichenfolgenDanke @jthi !
regex101 ist eine fantastische Ressource!
Betreff: Spaltensuche mithilfe einer Liste von TeilzeichenfolgenIch denke, ich würde es genau so machen, wie Sie sagen, entweder die Schlüsselliste durchlaufen oder sie dort einfach mit einem „Platzhalterzeichen“ eingeben (im Falle von Regex . sollte funktionieren). Bearbeiten: mit . Möglicherweise sind zu viele unterschiedliche Zeichen vorhanden, daher ist es höchstwahrscheinlich besser, eine Zeichenfolge zu erstellen, die alle zulässigen Zeichenfolgen enthält . Eine weitere Quelle für Regex regex101
Names Default To Here(1);
keys_list = {"aaa", "aa bb"};
new_keys_list = Transform Each({new_key}, keys_list, Substitute(new_key, " ", "."));
dt = Current Data Table();
regex_pattern = "(" || Concat Items(new_keys_list, "|") || ")";
row_list = [];
For Each Row(dt,
If(!IsMissing(Regex(lowercase(:TEST), regex_pattern)),
Insert Into(row_list, Row())
);
);
show(row_list); //row_list = [1, 2, 4, 5, 7, 8, 11];
@vince_faller Ich glaube, ich erinnere mich, dass ich etwas darüber gesehen habe, bin mir aber nicht mehr sicher, in welchem Fall das der Fall war und welche Funktion, zumindest bei JMP16 funktioniert IsMissing() mit Strings. Vielleicht war es bei Vergleichen wie „a“ == ., da es einen Fehler auslöst:

Betreff: Spaltensuche mithilfe einer Liste von Teilzeichenfolgen@jthi , @txnelson , @vince_faller Danke für die Lösungen! Ich habe tatsächlich vergessen, ein weiteres Szenario zu erwähnen. Das zweite Element in der „keys_list“ ist „aa bb“, das aus zwei durch ein Leerzeichen getrennten Wörtern besteht. In dem Datensatz, an dem ich arbeite, kann es vorkommen, dass das Trennzeichen aus anderen Sonderzeichen besteht. Wenn es beispielsweise eine 12. Zeile mit dem Wert „aa-bb“ gibt, möchte ich, dass diese Zeile ebenfalls aufgerufen wird, was zum Endergebnis [1,2,4,5,7,8,11 führt ,12].
Wie sollte ich die Skripte aktualisieren, um dies ebenfalls zu berücksichtigen? Ich vermute, es sollte einen Schritt geben, der alle Trennzeichenmuster in „keys_list“ durch einen Regex-Code für Sonderzeichen ersetzt?
Betreff: Spaltensuche mithilfe einer Liste von Teilzeichenfolgen@jthi , @txnelson , @vince_faller Danke für die Lösungen!
Ich habe tatsächlich vergessen, ein weiteres Szenario zu erwähnen. Das zweite Element in der „keys_list“ ist „aa bb“, das aus zwei durch ein Leerzeichen getrennten Wörtern besteht. In dem Datensatz, an dem ich arbeite, kann es vorkommen, dass das Trennzeichen aus anderen Sonderzeichen besteht. Wenn es beispielsweise eine 12. Zeile mit dem Wert „aa-bb“ gibt, möchte ich, dass diese Zeile ebenfalls aufgerufen wird, was zum Endergebnis [1,2,4,5,7,8,11 führt ,12].
Wie sollte ich die Skripte aktualisieren, um dies ebenfalls zu berücksichtigen? Ich vermute, es sollte einen Schritt geben, der alle Trennzeichenmuster in „keys_list“ durch einen Regex-Code für Sonderzeichen ersetzt?
Betreff: Spaltensuche mithilfe einer Liste von Teilzeichenfolgen@jthi , @vince_faller , @txnelson . Danke! Das sind tolle Lösungen!
Tatsächlich habe ich vergessen, ein weiteres Szenario anzugeben, das ich möglicherweise in den Daten sehe, an denen ich arbeite. Das zweite Element in der Schlüsselliste ist „aa bb“, das aus zwei durch ein Leerzeichen getrennten Wörtern besteht. In meinem Datensatz gibt es möglicherweise Fälle, in denen die Wörter durch andere Sonderzeichen getrennt sind, ich möchte sie aber trotzdem enthalten. Wenn es zum Beispiel eine 12. Zeile mit dem Wert „aa-bb“ gibt, möchte ich, dass diese auch aufgerufen wird, daher ist das Endergebnis [1,2,4,5,7,8,11,12 ]
Wie würden Sie die Skripte aktualisieren, um dies zu berücksichtigen? Ich vermute, es gibt einen Schritt, bei dem alle Trennzeichen in „keys_list“ durch einen speziellen Code für Sonderzeichen ersetzt werden, die in einem Muster von Regex erkannt werden können?
Danke für die Hilfe!
Betreff: Spaltensuche mithilfe einer Liste von TeilzeichenfolgenWenn Sie es in einer Spaltenformel tun möchten
Names default to here(1);
dt = current data table();
dt << Add Rows({:Test = "aa-bb"});
dt << New Column("Match", Formula(isstring(Regex(:TEST, "(aaa)|(aa.bb)", "\0", IGNORECASE))));
dt << Run Formulas(); // just to make sure the formula runs
match_rows = loc(dt:Match << Get Values());
dt << Delete Columns(:Match);
show(match_rows); // match_rows = [1, 2, 4, 5, 7, 8, 11];
Hier ist ein Regex-Ressource Ich mag es, wenn du es nicht sehr gut weißt.
Auch @jthi Wurde `ismissing()` nicht für die Arbeit mit Strings verwendet?Ich erinnere mich, dass es meine regulären Ausdrücke immer zerstört hat (deshalb habe ich hier „isstring()“ verwendet).Allerdings habe ich es bis 14.3 versucht und es scheint in Ordnung zu sein.
*Bearbeiten* hat den Platzhalter erstellt.
Betreff: Spaltensuche mithilfe einer Liste von TeilzeichenfolgenHier ist mein Ansatz zur Lösung dieses Problems
names default to here(1);
keys_list = {"aaa", "aa bb"};
dt = current data table();
row_list=[];
For( i = 1, i <= N Rows( dt ), i++,
For( k = 1, k <= N Items( keys_list ), k++,
If( Contains( :test[i], keys_list[k] ),
row_list = row_list || Matrix( i );
Break();
)
)
);
show(sort ascending(Row_list));Betreff: Spaltensuche mithilfe einer Liste von TeilzeichenfolgenIch würde hier höchstwahrscheinlich regulären regulären Ausdruck mit so etwas verwenden. Wenn es zu langsam wird, würde ich vielleicht anfangen, über etwas Komplizierteres nachzudenken
Names Default To Here(1);
keys_list = {"aaa", "aa bb"};
dt = Current Data Table();
regex_pattern = "(" || Concat Items(keys_list, "|") || ")";
row_list = [];
For Each Row(dt,
If(!IsMissing(Regex(lowercase(:TEST), regex_pattern)),
Insert Into(row_list, Row())
);
);
show(row_list); //row_list = [1, 2, 4, 5, 7, 8, 11];