A common task when creating a form based windows application is to allow a user to save their information and to also load saved information. In this short tutorial I will show you the basic steps to save a form’s information to a file and then load up the contents of the saved file.

Saving a Form’s Data to a File

The process for saving data to a file is pretty straightforward in Visual Basic. They include opening up a writer to a specified file, writing the contents, and then closing the writer when completed.

  1. Define and open your File Writer
    In this case we will utilize the StreamWriter class of the System.IO package. I will assume for these instructions that you have imported the System.IO library.
    Dim FileWriter As StreamWriter ' define the stream writer
    
    ' Open the File for writing
    FileWriter = New StreamWriter("c:\temp\sampleFile.txt", False)
  2. Write the desired data to the file
    To write data to the file you can utilize the WriteLine function. In the case of forms you may want to write different data. For a text field saving the Text is appropriate while when using a check box or radio button you will want to save the Checked property.
     ' Save Component values
    FileWriter.WriteLine(textBox.Name & "|" & textBox.Text)
    FileWriter.WriteLine(comboBox.Name & "|" & comboBox.SelectedIndex.ToString())
    FileWriter.WriteLine(radioBtn.Name & "|" & radioBtn.Checked.ToString())
  3. Close and Save your data to the File
    To complete your write you simply need to call Close on your writer. However if you want you can first call Flush to have the data written out. This step is optional however as the Close function will call Flush if needed.
     ' Save and Close File
    FileWriter.Flush() ' optional as close will flush
    FileWriter.Close()

Reading Data from a File

The process for reading information out of a File is similar to the writing process. First you want to open up the file, then you want to read a line of data, single character, or etc depending on how you are going to process the data until you reach the end. After you have read all the data you would lastly close the File.

  1. Define and open your File Reader
    In this case we will utilize the StreamReader class of the System.IO package.
     Dim FileReader As StreamReader   ' define the File Reader
    FileReader = New StreamReader("c:\temp\sampleFile.txt", False)
  2. Iterate until the End of File is reached
    Do Until FileReader.EndOfStream
        ' Processing Code goes here
    Loop
  3. Read in and Process the File’s data
    In the below example we will read in the file’s contents 1 line at a time. To see the full example of how the data is processed please view the full source code below.
    'Read the next line
    prop = FileReader.ReadLine()
  4. Close the File Reader
    After the loop close the FileReader as all the data has been read.
    FileReader.Close()

A complete sample Save and Write Class

For those that learn better by example below is a Simple Class that holds a complete example of saving data to a File from a Form in addition to loading the saved data from the form and setting the components to the correct state. The example contains basic error checking including validating that the saved file exists, however it does not validate the data in the file is of the correct format and not corrupted.

Imports System.IO
 
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        loadSavedData()
    End Sub
 
    Private Sub CloseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseButton.Click
        Close() 'Close Application
    End Sub
 
    Private Sub LoadButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoadButton.Click
        loadSavedData()
    End Sub
 
    Private Sub loadSavedData()
 
        Dim FileReader As StreamReader   ' define the File Reader
        Dim prop(2) As String            ' define array of length 2

        ' Test if the Saved File exists
        If File.Exists("c:\temp\sampleFile.txt") Then
 
            'Open the File for reading
            FileReader = New StreamReader("c:\temp\sampleFile.txt", False)
 
            ' Continue until EOF reached
            Do Until FileReader.EndOfStream
 
                'Read the next line and split its value based on the | character
                prop = FileReader.ReadLine().Split("|")
 
                ' If TextBox Component set it's property
                If String.Equals(prop(0), textBox.Name) Then
 
                    textBox.Text = prop(1)
 
                    ' If ComboBox Component set it's property
                ElseIf String.Equals(prop(0), comboBox.Name) Then
 
                    comboBox.SelectedIndex = Integer.Parse(prop(1))
 
                    ' If RadioButton set if checked
                ElseIf String.Equals(prop(0), radioBtn.Name) Then
 
                    radioBtn.Checked = Boolean.Parse(prop(1))
 
                ElseIf String.Equals(prop(0), RadioButton1.Name) Then
 
                    RadioButton1.Checked = Boolean.Parse(prop(1))
 
                ElseIf String.Equals(prop(0), RadioButton2.Name) Then
 
                    RadioButton2.Checked = Boolean.Parse(prop(1))
 
                End If
 
            Loop
 
            ' close the file
            FileReader.Close()
 
        End If
 
    End Sub
 
    Private Sub SaveButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveButton.Click
 
        Dim FileWriter As StreamWriter ' define the stream writer

        ' Open the File for writing
        FileWriter = New StreamWriter("c:\temp\sampleFile.txt", False)
 
        ' Save Component values
        FileWriter.WriteLine(textBox.Name & "|" & textBox.Text)
        FileWriter.WriteLine(comboBox.Name & "|" & comboBox.SelectedIndex.ToString())
        FileWriter.WriteLine(radioBtn.Name & "|" & radioBtn.Checked.ToString())
        FileWriter.WriteLine(RadioButton1.Name & "|" & RadioButton1.Checked.ToString())
        FileWriter.WriteLine(RadioButton2.Name & "|" & RadioButton2.Checked.ToString())
 
        ' Save and Close File
        FileWriter.Flush() ' optional as close will flush
        FileWriter.Close()
    End Sub
End Class
, , , , , , , ,

The strangest way to comment I have come across in my career is the use of the single quote (‘). Usually a language will use the pound (#) or double backslash (//) and will use the single quote (‘) to specify string values. However for whatever reason in Visual Basic they use the single quote (‘) not a big deal but definitely something that will seem a little strange to anyone coming to Visual Basic from Java or Web based languages.

'Declaring a String variable
Dim myString AS String
, ,

Arrays in Visual Basic are handled differently then their counter parts in Java, PHP, and Ruby. The first difference is that you specify array index by use of parenthesis not square brackets.

Java Array Initialization

String[] myArray = new String[20];

Visual Basic Array Initialization

Dim myArray(19) As String

Looking over the two arrays you may think that the Array in VB only can hold 19 elements this is incorrect. Visual Basic uses a 0 based index meaning that in actuality it holds elements at indexes 0 through 19 or 20 total items.

Fixed Length Array

When you specify the array’s dimension when declaring the array you have created it as a Fixed length Array this means that you can not change its size and decide you want to add a 21st item to an array of 20 items. To access or set an item in an array you simply need to call the variable with it’s index wrapped in parenthesis.

Dim myArray(2) As String
 
myArray(0) = "Matthew"
myArray(1) = "Apollo"
myArray(2) = "Joseph"
 
Dim aName As String
aName = myArray(1)

Dynamic Length Array

Sometimes you will not know the full size of the array you will need to create. In these cases you can create a Dynamic Length Array, these arrays allow you to change their size by re defining their length while preserving their contents. To define your Dynamic Array you simply don’t specify the length of the array in its initial creation.

Dim myArray() As String

Now before you can use the array to store elements you will need to redefine it with a length to do this you will need to use the ReDim command.

ReDim myArray(2) As String

If we need to increase the size again we would simply use ReDim again, however this will cause any existing data to be lost. If you want to keep all current elements in the dynamic you will need to use the Preserve keyword.

ReDim Preserve myArray(5) As String

Array Utility/Helper Functions

Split

If you have a delimited String that you want to break up based on a character the Split function is what you will want to use. It takes a String and a delimiter and returns an Array containing sub strings between the delimiter.

Dim userArray() As String
Dim userNames As String
 
nameArray= "Matthew,Doug,Sarah,Jill"
userArray = Split( nameArray, "," )
 
' The generated array would contain 4 elements
userArray[0] 'Matthew
userArray[1] 'Doug
userArray[2] 'Sarah
userArray[3] 'Jill

Join

Conversely you may find that you want to take an array and concatenate the elements with some value between the elements. In this case you would use the Join method. If you don’t want any delimiter between the values you simply don’t input a 2nd parameter and empty string will be used by default.

Dim userArray(3) As String
Dim userNames As String
 
userArray[0] = Matthew
userArray[1] = Doug
userArray[2] = Sarah
userArray[3] = Jill
 
userNames = Join(userArray, "," )
usernames 'Matthew,Doug,Sarah,Jill

As shown Visual Basics has all the common functionality of arrays in other programming languages the key to remember is that you use parenthesis not square brackets when accessing element indexes.

, , , ,

Visual Basic allows multiple methods for concatenating Strings. The simplest and most easily recognized method is using the + operator which will perform the concatenation of Strings. However if you want to concatenate two numbers together you will first have to convert them to Strings to use the + operator. To enable you to specify explicitly that you want to perform a String concatenation Visual Basic has the & operator.

The & operator

The & operator specifies that you want to perform String Concatenation of the objects. Using this operator the objects must be convertible to a String, and if the objects are null then an empty String is returned.

Dim testStr As String
testStr = "My " & "Number: " & 3214

In addition to the & operator you can use the &= operator if you want to append data to the end of a String.

Dim testStr As String
testStr = "Hello"
testStr &= " World"

String Builder

In the case that your application is performing massive String Concatenations then you might get better performance in utilizing the System.Text.StringBuilder Class. This class allows you append, prepend, replace, and in general manipulate the underlying String Data.

Dim sb As New StringBuilder()
sb.Append("Hello")
sb.Append(" World!")
sb.ToString()

String Concatenation is a basic task performed in most applications. Visual Basic enables you to utilize multiple methods for completing the task including the & operator that will force String Concatenation of Integers and Doubles.

, , , ,