JSLチャレンジ私は、与えられたパターンのすべての出現についてテキスト文字列を検索して、ループを使わずにそれらの位置を得るための簡単でエレガントな方法を見つけようとしています。Mungerは、いくつあるかを教えてくれますが、どこにあるのかはわかりません。私は方法についてのいくつかのラウンドを考えることができますが、私は何かが足りないように感じます。
再:JSLチャレンジ料理本のアイデアのように思えます。
https://community.jmp.com/t5/JSL-Cookbook/Search-a-string-for-all-occurrences-of-a-pattern/ta-p/79761
再:JSLチャレンジああ、そうです。ただ疑問に思います。私は人々に同じような質問をしてもらいましたが、コラム内のアミノ酸や塩基に関しては、私はBLASTと他のそのような道具がこの種の質問のためのより良い場所であると述べました。私は何人かの人にテキストのコラムの中の特定の文字列を探してもらいました(例えばコメントのように)。しかし、テキストエクスプローラはこれらのタイプの質問(ストップワードなどが与えられた場合)に対するギャップを埋めます。再:JSLチャレンジ正直なところ、これは私が似たようなことをする過程で私が考えた単なる一般的な質問です。私は過去にこの問題に遭遇したことを知っていますが、文脈を思い出すことができます。同様に、(ループを使用せずに)ターゲット文字列を含む要素を識別するテキスト文字列のリストを作成できるようにしたいと思います。
再:JSLチャレンジこんにちはドン、
このJSLの問題を解決するためにどのような問題が解決されていますか。ゲノミクスではないといいのですが。BLASTと呼ばれるツールがあります。これは、スコアリングメカニズムと同様に、含まれているファジーロジックと似たようなことをする、シーケンス検索に使用されるものです。
テキストの探査だけのために、私はこれについてはよく分からない。Word、TextPad、PDF Viewer、またはWebブラウザでfindコマンドを使用して、テキストのコーパス内の文字列を検索し、見つかった場所を知らせるようなものだと思います。もしそうなら、JSLでホイールを作り直す代わりにこれらのツールを使わないのはなぜでしょうか。あるいはテキストエクスプローラを使ってあなたが欲しいものを探すように強制する?
文脈を理解しようとしているだけです。
クリス
再:JSLチャレンジ
k長の文字列を1長の文字列に変更したという事実のために位置を調整するまで、これがうまくいかないことに気づきました。そのため、サブストリングが1文字を超える場合は、位置を調整する必要があります。したがって、最後の "if"節です。
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))`);
再:JSLチャレンジ****************これには調整が必要ですL:後の返信を参照してください********************
もしあなたが文字列に現れていないある文字に頼ることができるならば、あなたは以下のようなことをすることができます:
str = "abclkhsdfcdslkjscdlkjlkjcdkljcdcd";
loc(words(substitute(str, "cd", "#"), ""), "#" );
再:JSLチャレンジ私はあなたがスクリプトインデックスからこの例に基づいてソリューションを作ることができるかもしれないと思います:
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>