2 つの文字列を組み合わせるやあ、
次の形式の文字列を含む 2 つの列があります。
string1 = 1;0;2;0;0;8;0
string2 = 0;1;0;3;5;0;13
注 1: どちらの文字列にも同じ数の「;」が含まれています。 (しかし、それらは必ずしも同じ長さではありません)。
注 2: 2 つの文字列には、交互の位置に 0 があります。
注 3: 他の文字列の同じ位置にゼロ以外の用語が 2 つ並んでいる限り、文字列には 2 つの 0 を続けて (";" で区切って) 含めることができます。
2 つの列を 0 なしでマージした結果である新しい列 (string3) を作成したいと考えています。 上記の例では:
string3 = 1;1;2;3;5;8;13
したがって、string3 には同じ数の「;」が必要です。 string1 および string2 として、";" の間にすべての用語を含める必要があります。 0 なしの順序で。
簡単な数式のみを使用してそれを行う方法はありますか? または、ループなどの他の方法を使用しますか?
添付ファイルをご覧ください。
ありがとう、
ヨタム
データ表スクリプティングRe: 2本の弦を組み合わせるこれにはすでにいくつかの解決策があることがわかりますが、フィボナッチ数を使用したので注意を引きました;)
これは、文字列を行列に変換し、行列を追加し、結果を文字列に変換することによって、文字列を直接操作する別の式です (文字列はそれぞれ string1 と string2 という名前の列に格納されていると仮定します)。
乾杯、
ブレイディ
Substitute( Char( Parse( "[" || Substitute( :string1, ";", "," ) || "]" ) + Parse( "[" || Substitute( :string2, ";", "," ) || "]" ) ),
"[", "",
"]", "",
",", ";",
" ", ""
);
また、セミコロンの代わりにコンマ区切りを使用できるかどうかはわかりませんが、これを行うと、式が少し簡単になります。
Substitute( Char( Eval( Parse( Eval Insert( "[^:string1^] + [^:string2^]" ) ) ) ),
"[", "",
"]", "",
" ", ""
)
Re: 2本の弦を組み合わせるその間@txnelsonと@Craige_Halesあなたの状況を正しく理解していれば、ループなしの数式で実行できます。
これが私が最終的に得た式です。最初は画像として、次にJSL(式エディターに貼り付けることができます)です。

If( !Is Missing( :string1 ) & !Is Missing( :string1 ),
string1list = Words( :string1, ";" );
string2list = Words( :string2, ";" );
Concat Items( string1list[Loc( string1list, "0" )] = string2list[Loc( string1list, "0" )], ";" );
,
""
)
これは、単語()文字列をリストに変換する関数。 それはロク()関数を使用して string1 の 0 の位置の行列を返し、それを string1list (割り当ての左側) と string2list (割り当ての右側) の両方のインデックスとして使用します。 最後に、アイテムの連結()関数は、リストをセミコロンで区切られた文字列に変換します。
わかりにくい場合や意味をなさない場合はお知らせください。詳しく説明します。
Re: 2本の弦を組み合わせるありがとう!
残念ながら、私は現在 JMP16 をまだ持っていませんが、このソリューションは非常にエレガントに見えます!
Re: 2本の弦を組み合わせる素晴らしい。
ありがとう!
Re: 2本の弦を組み合わせる@ドンマコーマック- これは大きな挑戦問題かもしれないと思います。
- 文字列のエラーをキャッチして処理する方法 (数字以外、ゼロの不一致、長さが異なる)
- 1E6 セミコロンを速くする方法
編集:JMP 16の使用For Each Acrossループ:
string1 = "1;0;2;0;0;8;0";
string2 = "0;1;0;3;5;0;13";
result = "";
For Each( {{w1, w2}, idx}, across( Words( string1, ";" ), Words( string2, ";" ) ),
result ||= (If( idx > 1, ",", "" ) || If( w1 == "0", w2, w1 ))
);
result;「1,1,2,3,5,8,13」
Re: 2本の弦を組み合わせるこれが機能する式です。新しい数式列を含む新しいデータ テーブルを添付しました
w = 1;
newString = "";
While( Word( w, :string1, ";" ) != "",
If( newString != "",
newString = newString || ","
);
If( Word( w, :string1, ";" ) != "0",
newString = newString || Word( w, :string1, ";" ),
newString = newString || Word( w, :string2, ";" )
);
w++;
);
newString;
この式では、両方の文字列の同じ位置にゼロが見つかった状況や、両方の文字列の同じ位置にゼロ以外が現れる可能性がある状況はチェックされません。このような状況をどのように処理するかについてのルールは定義されていません。そのような問題をチェックする必要がある場合、式の変更は簡単なことです。