Incompatibilité de Type au moment de retourner un tableau
Je suis en train d'écrire une fonction VBScript, qui prend comme dans un tableau de chaînes de caractères et retourne un tableau contenant les mêmes chaînes triées par ordre alphabétique. Idéalement, je voudrais que cette fonction fonctionne exactement comme (par exemple) la fonction uCase, où vous pouvez dire:
myString = ucase(mystring)
Où la valeur de "machaine" seront remplacés par la version en majuscules de son contenu.
Mais quand j'ai mis en place un tableau dans mon script de test, puis le donner à ma fonction de tri, j'obtiens une erreur d'incompatibilité de type affectation du résultat à la variable d'origine. Tout ce que je peux comprendre, c'est que VBScript ne doit pas vous permettent de remplacer un tableau à un autre tableau, parce que la fonction TypeName me dit que les deux la variable d'entrée, je suis en utilisant la sortie de la fonction de tri sont du même type ("Variante()").
Voici mon code d'exemple à vous donner quelque chose de plus concret à travailler avec:
Option Explicit
Dim testArray(), thisItem, sortedArray
ReDim testArray(9)
testArray(0)="Xylophone"
testArray(1)="Elephant"
testArray(2)="Ferret"
testArray(3)="Eel"
testArray(4)="Dinosaur"
testArray(5)="Barracuda"
testArray(6)="Ape"
testArray(7)="Weasel"
testArray(8)="Firebird"
testArray(9)="Phoenix"
WScript.Echo "Starting Array:"
For Each thisItem In testArray
WScript.Echo " " & thisItem
Next
' This line will work fine, assigning Variant() to Empty sortedArray
sortedArray = SortArray(testArray)
' This line will generate a type mismatch, assigning Variant() to Variant()
testArray = SortArray(testArray)
WScript.Echo "Sorted Array:"
For Each thisItem In sortedArray
WScript.Echo " " & thisItem
Next
WScript.Quit 0
Function SortArray(ByVal inArray)
Dim a, b, swapVal
For a = UBound(inArray) - 1 To 0 Step -1
For b = 0 To a
If inArray(b) > inArray(b+1) Then
swapVal = inArray(b+1)
inArray(b+1) = inArray(b)
inArray(b) = swapVal
End If
Next
Next
SortArray = inArray
End Function
Si vous exécutez cet exemple de code, vous verrez que la ligne commençant par "sortedArray=" fonctionnent très bien. La ligne ci-dessous, en commençant par "testArray=" génère une erreur d'incompatibilité de type.
Idéalement, j'aimerais que cette fonction telle qu'une ou DEUX de ces lignes serait de travailler correctement. (En d'autres mots, lorsque je l'utilise, plus tard, je ne veux pas avoir à penser "Oh, oui, j'ai créer une autre variable et affecter la sortie à la place de ma variable d'origine.")
Suis-je raté quelque chose ou est VBScript incapable de faire ce que je veux faire ici?
OriginalL'auteur msalsbury | 2013-06-06
Vous devez vous connecter pour publier un commentaire.
Réponse courte: Votre
Dim testArray()
crée une abomination - un tableau fixe de pas de la taille que VBScript ne peut pas gérer correctement (juste essayer de prendre sa UBound()). Votre script fonctionne, si vous supprimez ceux ().Début d'une longue réponse: Regardez cet exemple de code:
de sortie:
pour avoir une idée de la façon de traiter avec fixe/dynamique des tableaux wrt pour copier vs en place de la modification. Fixe tableaux - qui ne peut pas être "écrasé" devrait être triés en place leur mémoire réservée; tous les tableaux peuvent être copiés dans un processus dynamique.
Masochistes peuvent regarder ce dégoûtant discussion
OriginalL'auteur Ekkehard.Horner
Solution Simple: utiliser un
System.Les Collections.ArrayList
objet.Je vais donner un coup de feu. Merci!
J'aime à penser que je suis assez adepte à l'aide de VBScript pour résoudre des problèmes, et puis je rencontre des réponses comme cela et penser "Wow... ma solution était un peu brut..."
OriginalL'auteur Ansgar Wiechers