Ouais, c'est un titre long et alambiqué ... désolé. Je travaille dans VBScript dans ASP bon ol '. J'ai un objet de dictionnaire, et chaque objet dans le dictionnaire se compose de sa clé et d'un tableau comme élément.erreur lors de l'obtention VBScript (Classic ASP) Valeurs de l'objet du dictionnaire dynamiquement sur la deuxième itération d'un For ... Chaque boucle
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
myDictionary.Add "a", Array("a1","a2")
myDictionary.Add "b", Array("b1","b2")
myDictionary.Add "c", Array("c1","c2")
Je passe aussi dans le script une liste de chaînes (et la conversion à un tableau), qui correspondent aux différentes entrées du dictionnaire, de sorte que seules les entrées peuvent être affichées sur la page, et dans l'ordre de le tableau. Maintenant, je veux parcourir le tableau et montrer le contenu de chaque clé correspondante dans myDictionary.
For Each thing in myArray
Response.Write myDictionary.Item(thing)(0) & " " & myDictionary.Item(thing)(1) & "<br />" & vbcrlf
Next
Fonctionne parfaitement dans la première itération et imprime correctement sur la page. Mais à la deuxième itération, j'ai une erreur. Voici la sortie complète de la page:
a1 a2
Erreur d'exécution Microsoft VBScript
'800a000d' incompatibilité Type: 'article (...)'
/Alpine/en_us /testCase.asp, ligne 28
Quelqu'un sait pourquoi cela ne fonctionne pas? Naturellement, le code montré ici est juste un cas de test, mais j'ai exactement le même problème dans mon application.
Voici le code complet, de sorte que vous pouvez simplement coller couper-n-dans votre environnement de test, si elle vous aide à me aider à comprendre cela:
<%@LANGUAGE="VBSCRIPT"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Iterating through Dictionary objects - Test Case</title>
</head>
<body>
<%
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
myDictionary.Add "a", Array("a1","a2")
myDictionary.Add "b", Array("b1","b2")
myDictionary.Add "c", Array("c1","c2")
Dim myText
myText = "a, b, c"
Dim myArray
myArray = Split(myText,",")
For Each thing in myArray
Response.Write myDictionary.Item(thing)(0) & " " & myDictionary.Item(thing)(1) & "<br />" & vbcrlf
Next
%>
</body>
</html>
D'autres éléments intéressants sur ce problème ...
Quand je coder en dur les trois entrées du dictionnaire dans les itérations, il fonctionne très bien:
For Each thing in myArray
Response.Write myDictionary.Item("a")(0) & " " & myDictionary.Item("a")(1) & "<br />" & vbcrlf
Response.Write myDictionary.Item("b")(0) & " " & myDictionary.Item("b")(1) & "<br />" & vbcrlf
Response.Write myDictionary.Item("c")(0) & " " & myDictionary.Item("c")(1) & "<br />" & vbcrlf
Next
Produit ceci:
a1 a2
b1 b2
c1 c2
a1 a2
b1 b2
c1 c2
a1 a2
b1 b2
c1 c2
Et pour vérifier que la 'chose' variable dans la boucle for-each fonctionne:
For Each thing in myArray
Response.Write thing
Next
Produit ceci:
abc
Je suis confus ...
Merci à tous! J'apprécie vraiment toute aide que vous pouvez fournir. :-)
Cheers,
Lelando
Eh bien, ça l'a fait! Puisque tous mes termes clés possibles sont des mots simples, et je sais que les personnes qui créeront la liste délimitée par des virgules utiliseront des espaces * de manière incohérente *, je devrai d'abord supprimer tous les espaces de la liste, je pense. Cela vous semble-t-il correct? – Lelando
Oh, et ** merci **! – Lelando
Ça me semble bien. Utilisez simplement myText = Replace (myText, "", "") – Tmdean