VBA - Utilisation tableau multidimensionnel au lieu de deux?
Beaucoup de questions stupides ces derniers temps, mais j'aimerais avoir des commentaires sur celui-ci.
J'ai une chaîne qui vient à partir d'un fichier INI. Il ressemble à Firstname=FIRSTNAME
. C'est, fondamentalement, un tableau avec des charges de ces. Je veux diviser, mais de préserver à la fois. Alors, j'ai réussi à mettre Firstname
dans son propre tableau et FIRSTNAME
sur elle-même. Mais alors, un de mes collègues m'a dit "Pourquoi ne pas simplement utiliser un tableau multidimensionnel à la place?". Et cela m'a fait réfléchir, mettre Firstname
en 0 et FIRSTNAME
en 1. Mais comment dois-je faire?
C'est mon code maintenant:
For iTeller = 0 To UBound(arrIniName)
If Not arrIniName(iTeller) = "" Then
arrIniName(iTeller) = Split(arrIniName(iTeller), "=")(0)
End If
Next
For iTeller = 0 To UBound(arrIniValue)
If Not arrIniValue(iTeller) = "" Then
arrIniValue(iTeller) = Split(arrIniValue(iTeller), "=")(1)
End If
Next
Les deux arrIniName et arrIniValues consiste exactement le même tableau pour commencer. Qui ressemble à ceci:
arrIniName(0) "Fistname=FIRSTNAME"
arrIniName(1) "Lastname=LASTNAME"
arrIniName(2) "Initials=INITIALS"
J'ai donc divisé chacun dans leurs propres tableaux distincts de la façon dont je le fais maintenant. Mais les mettre dans un tableau multi dimensionnel serait probablement mieux? Parce qu'alors j'aurais juste un tableau pour gérer et pourrait également tirer de ce tableau par le biais d'un For Each
boucle.
Edit: j'ai fini par le faire comme cela, où Values
est la matrice de
For Each s In Values
Dim strName, strValue
s = Split(s, "=")
strName = s(0)
strValue = s(1)
'Run function strName, strValue
Next
Je vais courir deux d'entre eux par une fonction qui crée une
Scripting.Dictionary
entrée. Donc, fondamentalement, je veux juste créer dynamiquement des variables basées sur ce qui est dans le fichier INI. Plus tard, je regarde pour les signets dans le Mot modèle basé sur FIRSTNAME
et insère une valeur en elle. J'ai juste envie d'être dynamique, donc je n'ai qu'à mettre à jour le fichier ini et insérer le signet que je veux, sans avoir à se soucier du code derrière vous voir 🙂 j'Espère que prend tout son sens :pRire - votre commentaire est apparu après que j'ai posté ma réponse. Pourquoi ne pouvez-vous pas créer le dictionnaire dès le début? Je veux dire, pourquoi avez-vous besoin d'un tableau temporaire pour stocker ces valeurs, plutôt que de juste les mettre directement dans le dictionnaire?
Bon point.. je n'ai pas vraiment besoin de l'tableaux pour quoi que ce soit. Il a juste obtenu de cette façon parce que je veux diviser la chaîne d'origine à partir du tableau en deux parties. Mais avec ton idée, je peux maintenant courir Pour Chaque boucle et le couper en mettre à chaque partie grâce à la fonction qui crée l'entrée de dictionnaire. Va l'essayer et voir comment il fonctionne 🙂
Qui fonctionne très bien.. je me sens comme un idiot! 🙂 Mais ces "aha"-expériences se fait de mieux à ce! 🙂
OriginalL'auteur Kenny Bones | 2011-03-30
Vous devez vous connecter pour publier un commentaire.
La solution idéale sonne comme un Dictionnaire (une structure de données qui détient des paires Clé/Valeur - exactement ce que vous avez dans votre fichier INI).
Un tableau multidimensionnel ne serait pas nécessaire ici, car vous n'avez que 2 dimensions (la clé et la valeur). Les tableaux sont généralement plus difficiles à travailler que du dictionnaire, car ils sont difficiles à redimensionner, de sorte que vous besoin de savoir combien d'articles que vous avez d'avance.
Par conséquent, je vous suggère le code suivant:
Cependant, si vous souhaitez utiliser un tableau multidimensionnel, alors ce qui suit va le faire:
Bon je suis un .NET developer, si j'arrive à avoir une riche bibliothèque par défaut 😉
Je vais définir ce que la réponse et la mise à jour de mon post original et de montrer ce que j'ai fait 🙂
Puis-je utiliser VBA.Collection de la même façon que le Dictionnaire?
Le VBA.La Collection est assez pauvre. Si je me souviens bien, il n'est pas indexé comme un dictionnaire et, plus sérieusement, il n'y a aucun moyen de vérifier si quelque chose existe dans la Collection sans déclencher d'erreur.
OriginalL'auteur RB.