1

更新: これは結果のデータがどのように見えるかです:

arrComm rows 0-6
454-45-45   45345-3454   FIN  Elected   Finance Committee  Details  More Details
343-343-3   343-944244   COM  Appointed Comm Committee     Details  More Details

arrComm added row 7 that has array of all members of that committee
This below array is named newMembers and 1 array for each row is added to the 
arrComm with this code:  arrComm(j,7) = newMembers

454-45-45   John   S   Smith  Chair   2003   2005
454-45-45   Sara   T   Jones  VP      2012   2013
454-45-45   Tim    R   Jane   Pres    2011   2014

VBScript で既存の配列の各「行」に配列を追加するコードを作成しました。エラーは出ませんが、正しく行っているかどうかわかりません。新しい配列を配置した列からデータにアクセスしようとすると、何も得られません。Vbscript で既存の配列に配列を追加するための正しい構文を教えてもらえますか?

現在、各行をループして、配列を最後に追加しています。このような:


ReDim Preserve arrComm(UBound(arrComm), 7)

'Loop through Committee Array and add Members Array 
Dim newMembers()

For j = 0 to UBound(arrComm)
'create a new array out of Members for each committee
 cmt_key = arrComm(j,0)

     'First find count of Members array that matches committee  
     y=0
     For s = 0 to UBound(arrMembers)
        If arrMembers(s,0) = cmt_key Then
        y=y+1
        End If  
     Next


     'Next build new array only with those members that match committee

     Redim newMembers(y,8)

     'Now loop through Original Members Array and add to New Members Array
     y=0
     For s = 0 to UBound(arrMembers)
        If arrMembers(s,0) = cmt_key Then
            newMembers(y,0) = arrMembers(s,0)
            newMembers(y,1) = arrMembers(s,1)
            newMembers(y,2) = arrMembers(s,2)
            newMembers(y,3) = arrMembers(s,3)
            newMembers(y,4) = arrMembers(s,4)
            newMembers(y,5) = arrMembers(s,5)
            newMembers(y,6) = arrMembers(s,6)
            newMembers(y,7) = arrMembers(s,7)
            newMembers(y,8) = arrMembers(s,8)
            y=y+1


        End If  
     Next



     'Now finally add newly created members array to Committee array

     arrComm(j,7) = newMembers(y,8)



Next

更新: 上記のコードをよりよく説明してみましょう。1. ReDim Preserve arComm... は、既存の 7 列の配列に 8 番目の列を追加します。UBound(arrComm) は、既存の行の正しい量に設定されていることを確認します。

  1. 次に、newMembers という新しい配列を作成します。

  2. 次に、newMembers の長さを指定する必要があるため、(arrMembers) から newMembers をプルしている配列をループし、arrMembers から newMembers に配置される量のカウントを取得します。(y)

  3. 次に、この数を取得したら、(y) と 9 列で newMembers を Redim します

  4. 次に、arrMembers を調べて、基準に一致する金額を newMembers に取り込みます。

  5. 次に、新しく作成した newMembers という配列を arrComm 配列の最後の列に追加します。

  6. 次に、円を返して arrComm 配列の次の行に移動し、最初からやり直して、別の newMembers 配列を作成します。今回は行数が異なり、最後にそれを arrComm 配列の次の行に追加します。そして、1 行ごとに arrComm の最後の列に新しい配列を追加するまで、何度も繰り返します。

4

2 に答える 2

2

テスト データが提供されていないとトラブルシューティングを行うのは困難ですが、「既存の配列の各「行」に配列を追加したい」と言っているのですが、これはあなたのコードで起こっていることではありません。実際、ある配列の要素を別の配列の要素として追加しています。配列全体を追加したい場合は、次のようにします。

arrComm(j,7) = newMembers

最後のメンバーだけでなく、すべてのメンバーをそこに入れたいからですよね? (言うまでもなく、ループ内で y を後置インクリメントしたため、実際には最後の値を取得していません。) そしてもちろん、出力コードでは、newMembers 内の ubounds を調べる必要があります。動的に作成されるためです。

これは、テストのために、特に問題を確認するために、ダミー データを含むスタンドアロンの実行可能なページにコードを分割する必要がある複雑な状況の 1 つです。

結果の配列をダンプするサンプル コードを追加します。

dim tempMembers
' pick a Members element for testing
tempMembers = arrComm(0,7)
' dump the array
dim a,b
for a = 0 to ubound(tempMembers,1)
    for b = 0 to ubound(tempMembers,2)
        response.write (tempMembers(a,b) & ",")
    next
    response.write "<br />"
next

本当に必要なのは、インバウンド データのサンプルです。次のコードを実行することはできましたが、明らかに現実を反映していません。

dim arrMembers()
dim arrComm()
ReDim Preserve arrComm (1,1)
ReDim Preserve arrMembers (1,8)
arrComm (0,0) = "target"
arrMembers (0,0) = "target"

実際のデータがどのように見えるかを反映するために、それを具体化していただけますか? すべてのディメンションが入力された 1 つまたは 2 つの行で十分です。

テストデータの一部に基づく完全な動作例:

dim arrMembers()
dim arrComm()
ReDim Preserve arrComm (2,7)
ReDim Preserve arrMembers (2,8)
arrComm (0,0) = "454-45-45"
arrComm (0,1) = "45345-3454"
arrComm (0,2) = "FIN"
arrComm (0,3) = "Elected"
arrComm (0,4) = "Finance Committee"
arrComm (0,5) = "Details"
arrComm (0,6) = "More Details"
arrComm (1,0) = "343-343-3"
arrComm (1,1) = "343-944244"
arrComm (1,2) = "COM"
arrComm (1,3) = "Appointed"
arrComm (1,4) = "Comm Committee"
arrComm (1,5) = "Details"
arrComm (1,6) = "More Details"
'
arrMembers (0,0) = "454-45-45"
arrMembers (0,1) = "John"
arrMembers (0,2) = "S"
arrMembers (0,3) = "Smith"
arrMembers (0,4) = "Chair"
arrMembers (0,5) = "2003"
arrMembers (0,6) = "2005"
'
arrMembers (1,0) = "454-45-45"
arrMembers (1,1) = "Sara"
arrMembers (1,2) = "T"
arrMembers (1,3) = "Jones"
arrMembers (1,4) = "Chair"
arrMembers (1,5) = "2012"
arrMembers (1,6) = "2013"
' non-match member
arrMembers (2,0) = "343-343-3"
arrMembers (2,1) = "Joe"
arrMembers (2,2) = "T"
arrMembers (2,3) = "Schmoe"
arrMembers (2,4) = "Chair"
arrMembers (2,5) = "2012"
arrMembers (2,6) = "2013"

ReDim Preserve arrComm(UBound(arrComm), 7)

'Loop through Committee Array and add Members Array 
Dim newMembers()

For j = 0 to UBound(arrComm)
'create a new array out of Members for each committee
 cmt_key = arrComm(j,0)

     'First find count of Members array that matches committee  
     y=0
     For s = 0 to UBound(arrMembers)
        If arrMembers(s,0) = cmt_key Then
        y=y+1
        End If  
     Next


     'Next build new array only with those members that match committee

     Redim newMembers(y,8)

     'Now loop through Original Members Array and add to New Members Array
     y=0
     For s = 0 to UBound(arrMembers)
        If arrMembers(s,0) = cmt_key Then
            newMembers(y,0) = arrMembers(s,0)
            newMembers(y,1) = arrMembers(s,1)
            newMembers(y,2) = arrMembers(s,2)
            newMembers(y,3) = arrMembers(s,3)
            newMembers(y,4) = arrMembers(s,4)
            newMembers(y,5) = arrMembers(s,5)
            newMembers(y,6) = arrMembers(s,6)
            newMembers(y,7) = arrMembers(s,7)
            newMembers(y,8) = arrMembers(s,8)
            y=y+1


        End If  
     Next



     'Now finally add newly created members array to Committee array

     arrComm(j,7) = newMembers



Next
'response.write (arrComm(0,7)(0,0))
dim tempMembers
' pick a Members element for testing
tempMembers = arrComm(0,7)
response.write (ubound(tempMembers,1) & " | " & ubound(tempMembers,2) & "<br />")
' dump the array
dim a,b
for a = 0 to ubound(tempMembers,1)-1
    for b = 0 to ubound(tempMembers,2)-1
        response.write (tempMembers(a,b) & ",")
    next
    response.write "<br />"
next
于 2012-05-24T23:30:12.697 に答える
1

あなたのコードはわかりませんが、配列を拡大したい場合は、ReDim Preserveを使用して前のコンテンツを保持する必要があり、ReDim Preserve では最後の次元のみを拡大できます。

WRT コメント:

これ:

Option Explicit

Dim i
For i = 0 To 3
    ReDim Preserve a(0, i)
    WScript.Echo i, "growing to", UBound(a, 2)
    a(0, i) = Array(i, "a", "b")
Next
WScript.Echo "--------"
For i = 0 To UBound(a, 2)
    WScript.Echo i, "the array", Join(a(0, i))
Next

出力:

cscript 00.vbs
0 growing to 0
1 growing to 1
2 growing to 2
3 growing to 3
--------
0 the array 0 a b
1 the array 1 a b
2 the array 2 a b
3 the array 3 a b

配列を拡張し、別の配列を拡張 (最後の!) 次元に格納する方法を示します。

の違いをマークしてください

ReDim Preserve arrComm(UBound(arrComm), 7) 

ReDim Preserve a(0, i)
于 2012-05-24T21:14:59.227 に答える