JSL ChallengeIch versuche, eine einfache und elegante Möglichkeit zu finden, eine Textzeichenfolge nach allen Vorkommen eines gegebenen Musters zu durchsuchen und deren Positionen ohne eine Schleife zu ermitteln. Munger wird mir sagen, wie viele es gibt, aber nicht wo sie sind. Ich kann mir ein paar Rundwege vorstellen, aber ich habe das Gefühl, dass mir etwas fehlt.
Re: JSL ChallengeScheint wie eine Kochbuchidee.
https://community.jmp.com/t5/JSL-Cookbook/Search-a-string-for-all-ocurrences-of-a-pattern/ta-p/79761
Re: JSL ChallengeAh OK Ich wundere mich nur. Ich habe den Leuten eine ähnliche Frage gestellt, aber in Bezug auf Aminosäuren oder Basen innerhalb einer Kolumne, und ich erwähnte, dass BLAST und andere derartige Tools ein besserer Ort für diese Art von Frage sind. Ich hatte einige Leute, die nach bestimmten Zeichenfolgen in einer Textspalte suchten (wie zum Beispiel Kommentare). Der Text-Explorer würde nun diese Lücke für diese Arten von Fragen füllen (gegebene Stoppwörter usw.).Re: JSL ChallengeEhrlich gesagt, das ist nur eine allgemeine Frage, über die ich während des Prozesses etwas Ähnliches nachgedacht habe. Ich weiß, ich bin in der Vergangenheit auf das Problem gestoßen, kann mich aber an den Kontext erinnern. Ebenso möchte ich in der Lage sein, Textzeichenfolgen aufzulisten, die diejenigen Elemente identifizieren, die eine Zielzeichenfolge enthalten (ohne eine Schleife zu verwenden).
Re: JSL ChallengeHallo Don,
Für welches Problem möchten Sie diese JSL-Herausforderung lösen? Ich hoffe keine Genomik. Es gibt ein Werkzeug namens BLAST, das die Leute für das Finden von Sequenzen verwenden, das mit einer Fuzzy-Logik und einem Bewertungsmechanismus etwas Ähnliches tut.
Wenn ich nur zum Erkunden von Texten bin, bin ich mir dessen nicht ganz sicher. Ich vermute, es ist wie mit einem Suchbefehl in Word, TextPad, PDF Viewer oder Web Browser, der nach einer Zeichenfolge in einem Textkorpus sucht und Ihnen den Ort des gefundenen Ergebnisses mitteilt. Wenn ja, warum nicht diese Tools verwenden, anstatt das Rad mit JSL neu zu erfinden? oder verwenden Sie den Text-Explorer und erzwingen Sie die Suche nach dem, was Sie möchten?
Ich versuche nur den Kontext zu verstehen.
Chris
Re: JSL Challenge
Mir wurde gerade erst klar, dass dies nicht funktionieren wird, bis Sie die Positionen für die Tatsache angepasst haben, dass Sie eine Zeichenfolge mit k Länge in eine Zeichenfolge mit 1 Länge geändert haben. Wenn also der Teilstring mehr als 1 Zeichen war, müssen die Positionen angepasst werden. Daher die letzte "Wenn" -Klausel.
str = "acdljkdfjhcdlkjgiucdlekjrfcdcd";
substr = "cd";
pos = loc(words(substitute(str, substr, "#"), ""), "#" );
if (length(substr) > 1, pos += (0::(length(substr)-1)*(nrow(pos)-1)::(length(substr)-1))`);
Re: JSL Challenge**************** Dies muss angepasst werdenL: siehe meine spätere Antwort **********************
Wenn Sie sich auf ein Zeichen verlassen können, das NICHT in der Zeichenfolge erscheint, können Sie Folgendes tun:
str = "abclkhsdfcdslkjscdlkjlkjcdkljcdcd";
loc(words(substitute(str, "cd", "#"), ""), "#" );
Re: JSL ChallengeIch denke, dass Sie möglicherweise eine Lösung basierend auf diesem Beispiel aus dem Skriptindex erstellen können:
Names Default To Here( 1 );
source = "believe";
// [aeiou] matches exactly one vowel
// .*? is a reluctant (vs greedy) match. try it without the ? to see the greedy behavior
// \1 is a back reference to the first ( group -- [aeiou] is inside the first ( group
matches = Regex Match(
source, // a variable allows updating some text
"([aeiou])(.*?)(\1)", // a regex with parens makes back references
">\2<" // the match is replaced by text that uses a back reference
);
Show( source, matches );
// results:
// source = "b>li<VE></VE>