2つの文字列を組み合わせるこんにちは、
次の形式の文字列を含む2つの列があります。
string1 = 1.11; 0; 3; 0; 5
string2 = 0; 2.2; 0; 4; 0
注1:両方の文字列に同じ数の「;」が含まれています(ただし、必ずしも同じ長さである必要はありません)。
注2:2つのストリングは交互の位置に0があります。
0なしで2つの列をマージした結果である新しい列(string3)を作成したいと思います。 上記の例の場合:1.11; 2.2; 3; 4; 5
したがって、string3には同じ数の「;」が必要です。 string1およびstring2として、「;」の間のすべての用語を含める必要があります順序で、0はありません。
数式のみを使用して(jslスクリプトなしで)それを行う方法はありますか?
あるいは、jslでそれを行う方法はありますか?
添付ファイルをご覧ください。
ありがとう、
ヨタム
データ表スクリプト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;
Re:2つの文字列を組み合わせる@DonMcCormack -これは大きな挑戦の問題かもしれないと思います。
- 文字列のエラー(数値以外、ゼロの不一致、同じ長さではない)をキャッチして処理する方法
- 1E6セミコロンで高速化する方法
編集:JMP16の使用全体にループ:
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つの文字列を組み合わせる素晴らしい。
ありがとう!
Re:2つの文字列を組み合わせるありがとう!
残念ながら、私は現在JMP16をまだ持っていませんが、このソリューションは確かに非常にエレガントに見えます!
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" )], ";" );
,
""
)
これはWords()文字列をリストに変換する関数。 それは使用しますLoc() string1の0の位置の行列を返し、それをstring1list(割り当ての左側)とstring2list(その割り当ての右側)の両方のインデックスとして使用する関数。 最後に、 Concat Items()関数は、リストをセミコロンで区切られた文字列に変換し直します。
これらのいずれかが紛らわしい、または意味をなさない場合は、私に知らせてください。さらに説明します。