VB.NET populate 2 dimensional array from a text file?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • OliveOyl3471
    New Member
    • Jul 2007
    • 8

    VB.NET populate 2 dimensional array from a text file?

    In Visual Basic.NET 2003, how do you populate a two dimensional array from a text file? I know how to check file existence, open the file for read, etc. I just can't get it to read more than one record from the file into the array.

    I have declared a 2 dimensional, 12 row, 2 column array named strVenues(11,1)
    in the public section of the form.

    The instructor is gone for the week, so I can't ask her any more questions about this project now. It is due next week, and I haven't even gotten the first part of it figured out! Here's what the she said, when I asked her about this project.

    "You do not need the inner FOR loop; since you know that there are only two columns, just write directly to those elements; e.g., strVenues(intRo w, 0) and strVenues(intRo w,1).

    Also, you are not separating the data. You are filling the columns with the entire record. The fields in the record have to be separated and stored in their respective columns.


    When you do your readline, you are reading the entire record into your variable strVen. The record has more than one field. You've got to use string manipulation to separate the fields and place them in the correct columns in the array.

    Same thing with the list box; you only want to list the events and nothing else."

    (I have not gotten to the list box part of this assignment yet.)

    I did get it to add only the first field in the record, but I cannot figure out how to get it to add all of the records from the file into the array! There are 11 records in the file, "venues.txt ":

    Toby Keith,C
    Chicago,C
    Nora Jones,C
    Styx,C
    Peter Pan,T
    Mama Mia,T
    Rent,T
    Cats,T
    David Copperfield,E
    Paula Dean Cooking,E
    Tractor Pull,E

    I don't know why the instructions say to create a 12 row array, when there are 11 records. Could that be the problem? If so, how would I fix it?

    I think this is how you put just the first field into the array. Can you tell me where the error(s) is/are in my code?

    Code:
        Private Sub readFile() 'reads file into an array
    
            'declare variables
    
            Dim sreReader As IO.StreamReader
    
            'open the file
            sreReader = IO.File.OpenText("venues.txt")
    
            'read each record into the array until the array is filled
    
            Dim strVen As String, intIndex, intCount As Integer
    
            For intCount = 0 To 10
                strVen = sreReader.ReadLine()
                strVenues(intCount, 0) = strVen.Substring(0, strVen.IndexOf(","))
                intIndex = strVen.IndexOf(",") + 1 
                strVenues(intCount, 1) = strVen.Substring(intIndex)
    
            Next intCount
    
            sreReader.Close()

    I have tried for hours and hours, to figure this out! I watched the class lectures, studied the book and searched online, and tried different things with the code, but nothing works!!! Please help me figure this out!

    Could it have something to do with the way I have used the intIndex and substring methods?

    Any clue as to what I'm doing wrong will be most appreciated!

    Thanks
    Last edited by OliveOyl3471; Jul 12 '07, 12:26 AM. Reason: Didn't include [Code] and [/Code] in original post
  • OliveOyl3471
    New Member
    • Jul 2007
    • 8

    #2
    I have asked at three different forums (plus this one) and so far I haven't seen any response.

    This is driving me nuts! I know it can be done, because my instructor knows what she's talking about, and she said to do it.

    Here are a few of the many things I've been trying. The apostrophes mean that I have been experimenting with these things…erase the apostrophe and test it, add an apostrophe and test it, in different combinations:

    Code:
            Dim strVen As String, intIndex, intCount As Integer
    
            '  For intCount = 0 To 10
    
            ' strVen = sreReader.ReadLine()
    
            ' strVenues(intCount, 0) = strVen.Substring(0)
    
            'intIndex = strVen.IndexOf(",", intIndex) + 1
    
            'strVenues(intCount, 1) = strVen.Substring(0)
    
            'intIndex = strVen.IndexOf(",", intIndex) + 1
    
            ' Next intCount 
    
    
    
            'Do While sreReader.Peek() <> -1
    
            For intCount = 0 To 10
    
                strVen = sreReader.ReadLine()
    
                strVenues(intCount, 0) = strVen.Substring(0, strVen.IndexOf(","))
    
                intIndex = strVen.IndexOf(",")  
    
                strVenues(intCount, 1) = strVen.Substring(intIndex, 1)
    
                'intIndex = strVen.IndexOf(",", intIndex) + 1
    
                'intIndex = strVen.IndexOf(",") + 1
    
            Next intCount
    Here's my test label, which still only displays the last record in the text file.

    I think this might mean that the compiler IS adding all the records to the array, but erases the previous one as it adds another, leaving only the last record. But HOW would I fix it?

    Code:
            Try
    
                Dim intX As Integer
    
                For intX = 0 To 10
    
                    testLabel.Text = strVenues(intX, 0) & ControlChars.NewLine
    
                    'intX = intX + 1
    
                Next intX
    
            Catch ex As System.IndexOutOfRangeException
    
            End Try
    
            ' For intIndex = 0 To 10
    
            ' testLabel.Text = strVen.Substring(0, strVen.IndexOf(",")) & ControlChars.NewLine
    
            ' Next intIndex

    Comment

    • OliveOyl3471
      New Member
      • Jul 2007
      • 8

      #3
      I managed to discover the answer to this question on my own. In case anyone who reads this needs to know the answer, here it is:

      I was not displaying the label correctly, for one thing.

      Here is the code that will populate my 2d array from text file:

      Code:
              'populate array from file
      
              Dim strVen As String, intIndex, intCount As Integer
              For intCount = 0 To 10
                  strVen = sreReader.ReadLine()
                  strVenues(intCount, 0) = strVen.Substring(0, strVen.IndexOf(","))
                  intIndex = strVen.IndexOf(",") + 1
                  strVenues(intCount, 1) = strVen.Substring(intIndex, 1)
              Next intCount
      
              'close the file
              sreReader.Close()

      Comment

      • kenobewan
        Recognized Expert Specialist
        • Dec 2006
        • 4871

        #4
        Well done thanks for sharing the solution.

        Comment

        Working...