2 セットの文字列データは同じデータを比較し、それらの値を加算して新しい文字列データ a1=sp2=20;sp1=34; を形成する必要があります。
a2=sp3=2;sp2=3;sp1=4;
2 つの文字列データのセット。文字列に同じデータ値を追加して、新しいデータのセットを取得します。
つまり、sp3=2;sp2=23;sp1=38
(追伸 簡単な応用例: 製品 2 の元の数量は 20 個、製品 1 の元の数量は 34 個、新規購入または新規販売された製品 2 が 3 個、製品 1 が 4 個などをシミュレーションして、仕入量と販売量と在庫、小規模の仕入販売在庫システムではこの方法を使用できます)
では、2 つの文字列データ セットを同じデータと比較し、マージするにはどうすればよいでしょうか?
まず、2つの文字列データを接続して結合します
a3=a1&a2
次に、a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;
次に、同じデータをa3に追加します
ここでの主な解決策は、同じデータを見つける方法です。
まず、a3 は sp2、sp1、sp3、sp2、sp1 で構成されているため、同じ sp2 と sp1 を別々に見つけて値を加算する必要があります。
Split関数で分割し、各データとセパレータの値を取得します。
つまり、s_array = Split(a3,;) から for i = 0 までの ubound(s_array) ループを通じて、個々のデータと値を取得できます。
各項目の形式は sp2=20 と同様ですが、同じグループ内のデータと比較するには Sp2 を抽出する必要があるため、抽出には独立した関数が必要です。
関数 getSPName(sp)
getSPName = スプリット(sp,=)(0)
終了機能
関数 getSPNum(sp)
getSPNum = スプリット(sp,=)(1)
終了関数
= より前のデータ名と = より後のデータ値をそれぞれ取得します。
次に、各データを分解する、つまり同じデータ名を見つける方法です。
この処理を想定すると、まずa3配列の最初の要素を抽出し、最初の要素を分割する前のデータと比較し、同じであれば加算します。
s_array = 分割(a3,;)
for i = 0 から ubound(s_array)
j=i+1 から ubound(s_array) へ
if getSPName(s_array(i)) = getSPName(s_array(j))
Nums = Nums + Cint(getSPNum(s_array(j)))
終了する場合
次
次
最終値を取得したので、いつでもその値を新しい動的配列に割り当てて、最終的に結合されたデータ配列を形成できます。
redim 結果を保存(p)
result(p) = getSPName(s_array(i)) & = & Nums
今すぐ
s_array = 分割(a3,;)
for i = 0 から ubound(s_array)
j=i+1 から ubound(s_array) へ
if getSPName(s_array(i)) = getSPName(s_array(j))
Nums = Nums + Cint(getSPNum(s_array(j)))
終了する場合
次
redim 結果を保存(p)
result(p) = getSPName(s_array(i)) & = & Nums
p=p+1
次
これは必ず次のような状況に遭遇します。 a3 配列の後続の要素が常に前に比較された同じ要素で操作されるため、この要素を result(p) 内の for i = 0 から ubound(s_array ) に含めることはできません。 = getSPName(s_array(i)) & = & 動的配列を数値化します。
すでに比較された要素を比較できなくなる問題を解決する方法
たとえば、a3 配列 (a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;) では、sp2=20 を取り出した後、比較された要素をマークする必要があります。演算は A sp2=3 になります。このとき、sp2=3 の配列要素番号は比較演算後にマークされ、この要素は次のループ比較ではカウントされません。
s_array = 分割(a3,;)
for i = 0 から ubound(s_array)
j=i+1 から ubound(s_array) へ
if getSPName(s_array(i)) = getSPName(s_array(j))
Nums = Nums + Cint(getSPNum(s_array(j)))
終了する場合
redim 保持 ID(q)
ID(q) = j
q = q + 1
次
redim 結果を保存(p)
result(p) = getSPName(s_array(i)) & = & Nums
p=p+1
次
ID(q)=j の定義は、現在同一の要素をマークし、それを動的配列 id(q) に割り当てることです。デフォルトでは q は 0 として定義され、q=q+1 が再度ループされます。
次に、このマークを使用して、比較および蓄積することを選択できます。
関数を定義する
関数IsInID(j)
ディムクス
IsInID = false
ID の各 x に対して
x = j の場合
IsInID = true
終了関数
次の場合に終了
次
終了関数
主な機能は
関数メインハブ
s_array = 分割(s,;)
for i = 0 から ubound(s_array)
IsInID(i) ではない場合
Nums = getSPNum(s_array(i))
j=i+1 から ubound(s_array) へ
if getSPName(s_array(i)) = getSPName(s_array(j))
Nums = Nums + Cint(getSPNum(s_array(j)))
redim 保持 ID(q)
ID(q) = j
q = q + 1
終了する場合
次
redim 結果を保存(p)
result(p) = getSPName(s_array(i)) & = & Nums
p = p + 1
終了する場合
次
結果の各 x に対して
メインhb=メインhb&x&;
次
終了関数
全体的な機能は、
<%
暗い結果()
ディムID()
dim p 、 q 、 Nums
p=0
q=0
数値 = 0
redim 保持 ID(q)
ID(q) =
s = sp4=33;sp2=20;sp1=34;sp3=2;sp2=3;sp4=4;
s = 左(s,len(s)-1)
応答.メインハブに書き込みます
関数メインハブ
s_array = 分割(s,;)
for i = 0 から ubound(s_array)
IsInID(i) ではない場合
Nums = getSPNum(s_array(i))
j=i+1 から ubound(s_array) へ
if getSPName(s_array(i)) = getSPName(s_array(j))
Nums = Nums + Cint(getSPNum(s_array(j)))
redim 保持 ID(q)
ID(q) = j
q = q + 1
終了する場合
次
redim 結果を保存(p)
result(p) = getSPName(s_array(i)) & = & Nums
p = p + 1
終了する場合
'数値 = 0
次
結果の各 x に対して
メインhb=メインhb&x&;
次
終了関数
関数 getSPName(sp)
getSPName = スプリット(sp,=)(0)
終了機能
関数 getSPNum(sp)
getSPNum = スプリット(sp,=)(1)
終了関数
関数IsInID(j)
ディムクス
IsInID = false
ID の各 x に対して
x = j の場合
IsInID = true
終了関数
次の場合に終了
次
終了関数
%>