合併兩個字符串你好,
我有 2 列包含以下格式的字符串:
字符串 1 = 1.11;0;3;0;5
字符串 2 = 0;2.2;0;4;0
注 1:兩個字符串都包含相同數量的“;” (但它們的長度不一定相同)。
注 2:兩個字符串在交替位置有 0。
我想創建一個新列(string3),這是合併兩列而沒有 0 的結果。 對於上面的例子:1.11;2.2;3;4;5
所以string3應該有相同數量的“;”作為字符串 1 和字符串 2,並且必須包含“;”之間的所有術語按順序,沒有 0。
有沒有辦法只使用公式(沒有 jsl 腳本)?
或者,有沒有辦法用 jsl 做到這一點?
請參閱附件。
謝謝,
約塔姆
數據表腳本編寫回复:合併兩個字符串這是一個有效的公式。我附加了一個帶有新公式列的新數據表
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;
回复:合併兩個字符串@DonMcCormack - 我認為這可能是一個很大的挑戰問題。
- 如何捕獲和處理字符串中的錯誤(非數字、不匹配的零、不相同的長度)
- 如何快速處理 1E6 分號
編輯:使用 JMP 16對於每個跨環形:
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”
回复:合併兩個字符串極好的。
謝謝!
回复:合併兩個字符串謝謝!
不幸的是,我目前還沒有 JMP16,但是這個解決方案看起來確實非常優雅!
回复:合併兩個字符串儘管@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(在該賦值的右側)的索引。 最後,連接項目()函數將列表轉換回分號分隔的字符串。
如果其中任何一個令人困惑或沒有意義,請告訴我,我會進一步解釋。