views:

62

answers:

4

As a practice exercise at my college we have to make a simple room booking system, complete with its own config file. We're not allowed to use the one built into VB.NET (the professor wants us to adapt to not relying on things like that) so I've made my own. This is a sample:

// Config file.
// First column is the variable name that will be used to
// reference the value in the second column. Seperate each
// setting with a new line.

MasterUser  Chris

DatabasePath    C:\Users\Chris\Desktop\Project.mdb

Comments in the file are pretty self-explanatory. I can parse the file fine, but what I'm having trouble with is making a variable the same name as whats in the first column. For example I need to make a variable called MasterUser and one called DatabasePath that holds Chris and C:\Users\Chris\Desktop\Project.mdb as values respectively. But I have no idea how to make a variable called that.

Any help would be cool, thanks. :)

EDIT: You can't see it from the code view here, but the variable name and value in the config file are separated by a tab :)

+1  A: 

You might want to consider using a better format for your configuration file, like XML. This will give you a lot more library support for parsing and searching within the file... that said, in this simple case, it looks like you just need a simple Dictionary(Of String, String) which probably won't make a lot of sense if you haven't learned about Generics yet :)

Basically you can load values in like this:

Dim settings As New Dictionary(Of String, String)
settings.Add("MasterUser", "Chris")
settings.Add("DatabasePath", "C:\Users\Chris\Desktop\Project.mdb")

Then when you want to retrieve a value based on the key in the dictionary, you can do it like this:

Dim master As String = settings("MasterUser") ' master = "Chris"

I hope that helps clear things up.

Scott Anderson
+1. Using XML configuration file is straightforward in .NET by using Serialization !
Amokrane
+1  A: 

Well, in the strict sense, you cannot "Make a variable named from file data" in most compiled languages. What you could do is to make a name-value association set (that's a Dictionary in .Net) and add entries to it based on what you read from a file.

However, what most programmers do is to "invert" that logic: as you code reads each line, it just does a series of IF's on the Name to see if it is recognized, and if so then just assings it to the corresponding predefined variable of the same name.

There are formats & libraries specially made for this (like XML, that's why the built in configs use it), but that might still be the kind of thing that you are not supposed to rely on.

RBarryYoung
A: 

Since your configuration file is not compiled into your code in any meaningful way, you aren't going to be able to create a variable (that is, a strongly-typed property or field on a class) dynamically. You have a couple of options.

If you want to keep your configuration file format:

  1. Create a class that contains all possible configuration keys as properties. Give that class a Load() method that knows how to parse a file into the class.
  2. Use a Dictionary -- either the Generics version or good old fashioned System.Collections.Dictionary. You'll retrieve elements with string keys.

If you're willing to change your configuration file format to XML, then you can use Serialization. This frees you from having to maintain a parser, but it requires a little bit more setup.

roufamatic
A: 

See here for my answer to another SO's question using nini and where to download it from. Essentially nini is a simple INI read/write library for configuration files. The question that remains to be seen is will your professor allow this inclusion of 3rd party open source?

Hope this helps, Best regards, Tom.

tommieb75