Create the Dictionary Object…. Please Consider
By Online Security Authority on Oct 1, 2009 in Website Security
Okay, I’ll admit I’m a bit of a fan of the Array. You either love or hate an Array. People who dislike the Array will often opt for a Collection instead. Other languages do provide a really cool object called a Dictionary or Hash Table. This is like a Collection that behaves like a Collection combined with an Array with some extra handy methods. VBA does not have this but VBScript does provide a Dictionary object, which is cool, and we can make use of this object within our VBA environment. To build a dictionary object do the following:
Dim my_dictionary as Object
Set my_dictionary = CreateObject (”Scripting.Dictionary”)
Voila! We have a dictionary. What can we do with it? We can add items, check for the existence of items, return an array of keys, return an array of items, set how a dictionary compares keys and get the count and so on. An example:
‘First create the Dictionary Object
Dim my_dictionary as Object
Set my_dictionary = CreateObject (”Scripting.Dictionary”)
‘When adding an object or value to a dictionary you put the key first and the actual value or object second. The key is mandatory and you cannot add items without it.
my_dictionary.Add “Key 1″, “Value 1″
my_dictionary.Add “Key 2″, “Value 2″
my_dictionary.Add “Key 3″, “Value 3″
my_dictionary.Add “Key 4″, “Value 4″
So now we’ve added four values to the dictionary. Let’s do some things we cannot do cleanly or at all with a Collection. Say we want to replace “Value 3″ with the name “Zebra”. Too easy!
my_dictionary.Item(”Key 3″) = “Zebra”
You couldn’t do that with a collection! In a collection you would have to remove one item and add another, thus losing the order or your items. A dictionary behaves like an Array in this respect. What if we were not sure there was a key called “Key 3″ within the dictionary and wanted to avoid an error. Again, easy, we just use the Exists method of the dictionary object:
if my_dictionary.Exists(”Key 3″) then
my_dictionary.Item(”Key 3″) = “Zebra”
else
my_dictionary.Add “Key 3″, “Zebra”
end if
We might want to know how many items are in the dictionary, just use the Count method which is the same as the one in a collection.
MsgBox my_dictionary.Count
If you want to iterate through the items in a dictionary, you can’t use an integer counter as you would an Array or Collection but you can use two methods to do so:
‘You can just grab the items from the dictionary like so:
Dim items as Variant
items = my_dictionary.Items
‘Iterate through the array of items. These items can include objects aswell.
Dim separate_item as Variant
For Each separate_item in items
MsgBox separate_item
Next separate_item
‘Or you can extract the keys and iterate through the items (which is another advantage over a Collection that does not give you it’s keys or let you know what they are)
Dim keys as Variant
keys = my_dictionary.Keys
‘Iterate through the array of items. These items can include objects aswell.
Dim key as Variant
For Each key in keys
MsgBox my_dictionary. Item(key)
Next key
Too easy! To remove an item or all items you can use Remove and RemoveAll respectively:
my_dictionary.Remove(”Key 2″)
Or
my_dictionary.RemoveAll
These are the basics. I’ll look at the CompareMode method in un minuto. The Dictionary object is a real advantage when we need to build a Collection of Collections or a Class Collection. For example; say we had to collect data on spys and their current missions. Usually we would have to create a Class Object called Spy and hold a Private or Public Collection within the class to which we would add their missions. One class too many (A Collection is a Class)! Let’s use a Dictionary instead…
Dim my_dictionary As Object Dim missions As Collection Dim spy_name As String Dim keys, key As Variant Set my_dictionary = CreateObject(”Scripting.Dictionary”)
‘Add three lots of spies.
Set missions = New Collection
spy_name = “Alexander Poligraphovich”
missions.Add “Vladivostok”
missions.Add “Ukraine”
missions.Add “Beijing”
my_dictionary.Add spy_name, missions
spy_name = “Mohammed Ramadan”
Set missions = New Collection
missions.Add “Munich”
missions.Add “Tehran”
missions.Add “Sydney”
my_dictionary.Add spy_name, missions
spy_name = “Sri FitzPatrick”
Set missions = New Collection
missions.Add “Dublin”
missions.Add “San Francisco”
my_dictionary.Add spy_name, missions
keys = my_dictionary.Keys
For Each key In Keys
MsgBox key & vbCrLf & _
my_dictionary(key).item(1) & vbCrLf & _
my_dictionary(key).item(2) & vbCrLf & _
my_dictionary(key).item(3)
Next key
The CompareMode method lets you set how the dictionary compares it’s keys when looking for duplicates etc. There are four-compare modes vbBinaryCompare, vbTextCompare, vbDatabaseCompare (for MS Access only) and vbUseCompareOption (which uses the setting in the Option Compare statement at the top of a module). How can we use this? Say we add two values with the Keys of monkey and MONKEY’ one in all lowercase and the other in all uppercase.
my_dictionary.Add “monkey”, “Giraffe”
my_dictionary.Add “MONKEY”, “Elephant”
MsgBox my_dictionary.Count
The MsgBox will show an item count of 2, because the two keys are essentially different. The dictionary is performing a binary comparison upon the keys so you can add more than one ‘monkey’ as long as they have some difference in character case. What if we wanted the word monkey in all of it’s forms to be compared by name and not content? In other words we don’t want more than one ‘monkey’ in the dictionary. We use CompareMode vbTextCompare:
my_dictionary.CompareMode = vbTextCompare
my_dictionary.Add “monkey”, “Giraffe”
my_dictionary.Add “MONKEY”, “Elephant”
MsgBox my_dictionary.Count
On this example we don’t even get to the Msgbox, instead we get an error stating “This Key is already associated with an element of this collection.”. This stops two keys being added that have the same name. vbBinaryCompare behaves the same way as the first example does (it is the default) and vbDatabaseCompare….Well I read what it did once and never had to remember it again! You can find explanations for these, albeit very succinct, within the MS Help in Access, or better still Google it.
Hopefully this gives you an extra tool alongside the Collection or Array and some ideas on future use. A Dictionary makes code structure cleaner and more humanly understandable. This VBScript tool will really pay dividends.
Did you find this article useful? For more useful tips and hints, points to ponder and keep in mind, techniques, and insights pertaining to Internet Business, do please browse for more information at our websites. Article Source:http://www.articlesbase.com/programming-articles/create-the-dictionary-object-please-consider-1289145.html
http://www.allhottips.com
http://www.bookstoretoday.com
Written by: OSAblogger / Bill Wardell - Please Read Our Latest OSA eZine Edition
Other Places You Can Find Me…
Digg - LinkedIn - OSA Community - Facebook - StumbleUpon - MyBlogLog
If you're a concerned parent, you may want to subscribe to the: OSA~RSS while your here, please JOIN our: OSA Forum... also Follow Me On Twitter Thanks for visiting!
OSA Related Posts -
Website Design in Dallas – Functionality & Performance are Key Website design in Dallas must focus on functionality and performance. Too many website designers focus on the bells and whistles that bog down websites and turn-off website visitors. Most consumers make a decision on whether or not to stay on a website in less than two seconds.  The most...... -
Special Wedding Anniversary Gift Ideas - Make Your Anniversary an Occasion Staying married is a great achievement especially in this modern society where people throw away marriage and family whenever it doesn't suit them or gets too tough. Sometimes marriages fail but couples seem less likely to really fight to stay together with counselling or talking things through. It might be...... -
How Articles Can Be The Best Way TO Link Build Here are several methods to website link building, the paramount way to add to your search engine rankings. The sites you see ranked dressed in the top Google results take part in several thousands of links all on the internet putting them in those top positions. One way to effectively...... -
Dynamics GP Development: Dexterity, eConnect, SQL Scripting notes Programming for Microsoft Dynamics GP, formerly known as Great Plains Dynamics, eEnteprise (please note that its predecessor Great Plains Accounting for DOS and Windows is different application and its modification options are different and in fact very limited) - if this is you research subject, we offer you this small...... -
Journal Entry: You Have My Permission to... NOT... "Click Here" Don't look now, but you just gave me your social security number. You shouldn't worry, though. I'm not the one who'll be doing anything with it. I just get the information. My customer uses it. Who am I, you might be asking? Well, I could be your average bored but......
OSA Related Websites -
Antique Postage Stamps Stamps -> Worldwide -> Postal History When it comes to collecting stamps, most collectors dream of being able to find the perfect antique postage stamps. By far, these are usually the ones that are the most valuable and in many cases, they are the most visually interesting. If you are...... -
Personalized Shot Glasses Collectibles -> Barware -> Shot Glasses For the person who has everything, personalized gifts can be some of the most thoughtful, so why not choose personalized shot glasses? There are many advantages to this type of collectible item, both as a gift, and as something you collect yourself. Personalized shot...... -
Collecting Rare Collectibles 101 There are all kinds of different collectibles out there, including rare collectibles and more common collectibles for example. If you are interested in collecting rare collectibles, then knowing how to identify them, find them, price them, display them and sell them are all very important considerations to make. Here is...... -
Generate SSH Keys in Two Easy Steps This post is probably as much for me as it is everyone else. I got sick of having to look up 3 or 4 different SSH keygen tutorials every time I needed to generate a private/public SSH key pair, so I thought I'd write up my own. Here's how to...... -
Giving Personalized Gifts is One of the Ways to Save Money These days, one of the best ways to save money is to avoid buying things or items that you can make yourself. Through this, you have the control over the entire product as well as of the outcome of it. You can apply this when giving out gifts for people......
























