7
votes

Comment pousser la valeur dans la taille de la matrice non spécifique?

Je recherche de l'aide pour appuyer sur la valeur d'analyse de la valeur XML basée sur certains filtres / mot correspondants dans un ArrayList . Cependant, ce réseau ne doit pas avoir de taille prédéfinie de matrice, car les entrées XML sont dynamiques à partir du fichier au fichier. Signification, XML File1 peut avoir 10 d'autres entrées et XML File2 peut avoir 15 entrées. Quelqu'un peut-il indiquer comment je peux faire en dessous de 2Things:

  1. Comment définir une liste de matrices avec pré-définir la taille de la matrice? La taille dépend de la liste d'entrée XML lorsque l'utilisateur lit le nœud par le nœud
  2. Lorsque la correspondance de mots XML trouvée, va analyser l'entrée / valeur XML dans Excel VBA et garder à l'intérieur de ce tableau.

1 commentaires

Vous pouvez également avoir une certaine valeur sur la recherche de Stackoverflow.com/q/8560718/641067 . Cette question exécute un Redim Conserve Tous les 1000 enregistrements à l'aide d'un test mod comme processus redim peut être coûteux de code temporel


3 Réponses :


16
votes

Les matrices peuvent être définies comme xxx pré>

puis dimensionné et re-dimensionné au temps d'exécution p> xxx pré>

ou, pour conserver tout Les données qui se trouvent dans le tableau p> xxx pré>

lb et ub sont des limites de la matrice et peuvent être déterminées par code, par exemple p> xxx pré> p> Pour redimensionner progressivement P>

redim MyArray (0 to 0)
For each line in xml
    if Match then
        MyArray(ubound(MyArray)) = Match
        Redim Preserve MyArray(0 to ubound(MyArray) + 1)
    end if
Next
' Array ends up 1 size larger than number of matches '
if ubound(MyArray) > 0 then
    redim Preserve MyArray (0 to ubound(MyArray) - 1)
end if


2 commentaires

Merci Chris, mais je ne pourrai que connaître l'UB de la matrice à la fin de la boucle de la boucle, mais je dois assigner / pousser la valeur d'entrée dans la matrice à chaque correspondance de XML.


@LeNew, la redimelle lorsque chaque match est trouvé. Je vais éditer une réponse à la démo



7
votes

aussi stupide que possible, il est parfois utile d'utiliser une chaîne qui peut être considérée comme une gamme dynamique de tri, puis la divisez-la. Cette approche ne fonctionne que si les objets de votre réseau résultant sont des chaînes ou des chiffres et vous pouvez être sûr que le char. Séquence que vous sélectionnez comme un séparateur ne se produira pas à l'intérieur des représentations de chaîne de vos objets, comme par exemple:

Temp = ""
Separator = ","
For A = 1 to 155
    If Temp <> "" Then
        Temp = Temp & Separator
    End If
    Temp = Temp & CStr(A)
Next 'A
myArray = Split(Temp, Separator)
'now myArray has the elements 1, 2, ..., 155 (which are strings!)


0 commentaires

1
votes

Bien que l'utilisation de collections ou de dictionnaires puisse être de meilleures options pour ajouter incrémentalement des éléments, il pourrait y avoir des moments où il est plus facile d'incrémenter un tableau.


fonction pour appuyer sur un tableau h3>

Voici une fonction qui peut ajouter un élément ou même plusieurs éléments à la fin d'une matrice. Je basé sur la façon dont Javascripts Push code> fonctionne fonctionne. P> xxx pré>

Cette fonction utilise également une fonction d'assistance arraydimensionlength code> pour assurer que Un tableau a été passé et qu'il ne s'agit que d'une seule dimension. P>

Private Sub testArrayPush()

    Dim data() As String

    ' Single element
    ArrayPush data, "apple"

    ' Multiple elements
    ArrayPush data, "banana", "carrot"

    Debug.Print Join(data, ", ") '<~ apple, banana, carrot

End Sub


0 commentaires