Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. VB6 code works like a treat but need it in vb.net grrr

VB6 code works like a treat but need it in vb.net grrr

Scheduled Pinned Locked Moved Visual Basic
csharphelp
14 Posts 4 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O offroaderdan

    Experts, I have some vb6 code that does exactly what i want it to do (yippee) however the program i am developing in is vb.net. Now orignally i thought that most of the code would be fairly easy to convert however some of it isn't being liked. This is the main code that i need help with

    open App.path & "\files\high scores.txt" for input as #1
    a=1
    While not EOF(1)
    Input #1, names(a), scores(a)
    a=a+1
    end while
    close #1

    vb.net doesn't like open app path and for input as #1as well as input #1 and close #1 If someone could help me that would be great. Many thanks Dan

    O Offline
    O Offline
    offroaderdan
    wrote on last edited by
    #2

    Just an update here is what i have done in vb.net

    dim objReader as new system.IO.StreamReader(FILE_NAME)

    Do while not EOF(1)

    list1.text = names(a) & objReader.readline()
    a=a+1
    loop

    objReader.close
    call highscores

    For some reason when i try to run the code it doesn't like the dow while loop and says bad file name or number? If anybody can help me that would be really cool Dan

    D 1 Reply Last reply
    0
    • O offroaderdan

      Experts, I have some vb6 code that does exactly what i want it to do (yippee) however the program i am developing in is vb.net. Now orignally i thought that most of the code would be fairly easy to convert however some of it isn't being liked. This is the main code that i need help with

      open App.path & "\files\high scores.txt" for input as #1
      a=1
      While not EOF(1)
      Input #1, names(a), scores(a)
      a=a+1
      end while
      close #1

      vb.net doesn't like open app path and for input as #1as well as input #1 and close #1 If someone could help me that would be great. Many thanks Dan

      W Offline
      W Offline
      Wayne Gaylard
      wrote on last edited by
      #3

      From what I can gather, basically what you are trying to do is to read a list of players and their high scores from a text file, and populate arrays named names and scores. In .Net you need to import System.IO and use a StreamReader to read from the file. An important consideration obviously, is the set up of the original text file. i.e - is it a comma delimted file ?, is each record on a new line ? etc. I threw this together, working on a few assumptions. 1. The text file is stored in the same folder as the application executable. 2. The text file consists of a new line for each player, and each player property is separated by a comma.

          names = New List(Of String)
          scores = New List(Of Integer)
          Dim strFilename As String = Application.StartupPath & "\\highscores.txt"
          Dim srScores As New StreamReader(strFilename)
          While Not srScores.EndOfStream
              Dim strRead As String = srSave.ReadLine
              ListBox1.Items.Add(strRead)
              Dim strSplit() As String = Split(strRead, ",")
              names.Add(strSplit(0))
              scores.Add(strSplit(1))
          End While
          srScores.Close()
      

      I also assumed names and scores were lists rather than arrays. You would obviously need to consider error handling as a major issue which I have completely ignored. Hope this helps.

      O 1 Reply Last reply
      0
      • O offroaderdan

        Just an update here is what i have done in vb.net

        dim objReader as new system.IO.StreamReader(FILE_NAME)

        Do while not EOF(1)

        list1.text = names(a) & objReader.readline()
        a=a+1
        loop

        objReader.close
        call highscores

        For some reason when i try to run the code it doesn't like the dow while loop and says bad file name or number? If anybody can help me that would be really cool Dan

        D Offline
        D Offline
        David Skelly
        wrote on last edited by
        #4

        If you are using StreamReader then you can do this (taken straight from the documentation for StreamReader):

                ' Create an instance of StreamReader to read from a file.
                Dim sr As StreamReader = New StreamReader("TestFile.txt")
                Dim line As String
                ' Read and display the lines from the file until the end 
                ' of the file is reached.
                Do
                    line = sr.ReadLine()
                    Console.WriteLine(Line)
                Loop Until line Is Nothing
                sr.Close()
        

        You don't need to worry about file numbers in VB.NET.

        1 Reply Last reply
        0
        • W Wayne Gaylard

          From what I can gather, basically what you are trying to do is to read a list of players and their high scores from a text file, and populate arrays named names and scores. In .Net you need to import System.IO and use a StreamReader to read from the file. An important consideration obviously, is the set up of the original text file. i.e - is it a comma delimted file ?, is each record on a new line ? etc. I threw this together, working on a few assumptions. 1. The text file is stored in the same folder as the application executable. 2. The text file consists of a new line for each player, and each player property is separated by a comma.

              names = New List(Of String)
              scores = New List(Of Integer)
              Dim strFilename As String = Application.StartupPath & "\\highscores.txt"
              Dim srScores As New StreamReader(strFilename)
              While Not srScores.EndOfStream
                  Dim strRead As String = srSave.ReadLine
                  ListBox1.Items.Add(strRead)
                  Dim strSplit() As String = Split(strRead, ",")
                  names.Add(strSplit(0))
                  scores.Add(strSplit(1))
              End While
              srScores.Close()
          

          I also assumed names and scores were lists rather than arrays. You would obviously need to consider error handling as a major issue which I have completely ignored. Hope this helps.

          O Offline
          O Offline
          offroaderdan
          wrote on last edited by
          #5

          Cheers Zimvbcoder. This is indeed very helpful :D However i have a few questions

          names = New List(Of String) ' vb doesn't like the new list of string?
          scores = New List(Of Integer)
          Dim strFilename As String = Application.StartupPath & "\highscores.txt"
          Dim srScores As New StreamReader(strFilename)
          While Not srScores.EndOfStream
          Dim strRead As String = srSave.ReadLine
          ListBox1.Items.Add(strRead)
          Dim strSplit() As String = Split(strRead, ",")
          names.Add(strSplit(0)) ' doesnt like names.add?
          scores.Add(strSplit(1))
          End While
          srScores.Close()

          Also srSave isn't doing anything? I am very grateful for you replying to my post. Many thanks Dan

          T W 2 Replies Last reply
          0
          • O offroaderdan

            Cheers Zimvbcoder. This is indeed very helpful :D However i have a few questions

            names = New List(Of String) ' vb doesn't like the new list of string?
            scores = New List(Of Integer)
            Dim strFilename As String = Application.StartupPath & "\highscores.txt"
            Dim srScores As New StreamReader(strFilename)
            While Not srScores.EndOfStream
            Dim strRead As String = srSave.ReadLine
            ListBox1.Items.Add(strRead)
            Dim strSplit() As String = Split(strRead, ",")
            names.Add(strSplit(0)) ' doesnt like names.add?
            scores.Add(strSplit(1))
            End While
            srScores.Close()

            Also srSave isn't doing anything? I am very grateful for you replying to my post. Many thanks Dan

            T Offline
            T Offline
            The Man from U N C L E
            wrote on last edited by
            #6

            For List(Of ) you need to import System.Collections.Generic. As for srSave, I think you made a typo. It should be. Dim strRead As String = srScores.ReadLine()

            If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

            O 1 Reply Last reply
            0
            • O offroaderdan

              Cheers Zimvbcoder. This is indeed very helpful :D However i have a few questions

              names = New List(Of String) ' vb doesn't like the new list of string?
              scores = New List(Of Integer)
              Dim strFilename As String = Application.StartupPath & "\highscores.txt"
              Dim srScores As New StreamReader(strFilename)
              While Not srScores.EndOfStream
              Dim strRead As String = srSave.ReadLine
              ListBox1.Items.Add(strRead)
              Dim strSplit() As String = Split(strRead, ",")
              names.Add(strSplit(0)) ' doesnt like names.add?
              scores.Add(strSplit(1))
              End While
              srScores.Close()

              Also srSave isn't doing anything? I am very grateful for you replying to my post. Many thanks Dan

              W Offline
              W Offline
              Wayne Gaylard
              wrote on last edited by
              #7

              I assumed that the list of names and the list of scores would be previously declared. To be honest with you I would create a class Player in my app, and in that class you could have a function GetAllPlayers which would look like this :

              Imports System.IO

              Public Class Player
              Implements IComparable
              
              Private strName As String
              Private intHighScore As Integer
              
              Public Property Name() As String
                  Get
                      Return strName
                  End Get
                  Set(ByVal value As String)
                      strName = value
                  End Set
              End Property
              
              Public Property HighScore() As Integer
                  Get
                      Return intHighScore
                  End Get
                  Set(ByVal value As Integer)
                      intHighScore = value
                  End Set
              End Property
              
              Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
              
                  Dim OtherPlayer As Player = CType(obj, Player)
                  Return Me.HighScore - OtherPlayer.HighScore
              
              End Function
              
              Shared Function GetAllPlayers(ByVal FileName As String) As List(Of Player)
              
                  Dim lstPlayers As New List(Of Player)
                  Dim strFilename As String = FileName
                  Using srScores As New StreamReader(strFilename)
                      While Not srScores.EndOfStream
                          Dim newPlayer As New Player
                          Dim strRead As String = srScores.ReadLine
                          Dim strPlayerProperties() As String = Split(strRead, ",")
                          newPlayer.Name = strPlayerProperties(0)
                          newPlayer.HighScore = strPlayerProperties(1)
                          lstPlayers.Add(newPlayer)
                      End While
                  End Using
                  Return lstPlayers
              
              End Function
              

              End Class

              Then you can declare a list(Of Player) in your main form and populate it like this :

              Private Sub Form1\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
              
                 Try
                      lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)
                      lstPlayers.Sort()
                      For i As Integer = 0 To lstPlayers.Count - 1
                          ListBox1.Items.Add(lstPlayers(i).Name & ", " & lstPlayers(i).HighScore)
                      Next
                  Catch ex As System.IO.IOException
                      MsgBox("There was an error retrieving High Scores.")
                  End Try
              
              End Sub
              

              This is very simple but a good way to start thinking in a more structured way.

              O 1 Reply Last reply
              0
              • T The Man from U N C L E

                For List(Of ) you need to import System.Collections.Generic. As for srSave, I think you made a typo. It should be. Dim strRead As String = srScores.ReadLine()

                If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

                O Offline
                O Offline
                offroaderdan
                wrote on last edited by
                #8

                Thanks the man from U.N.C.L.E so are you saying that the following code would become name = New list(of system.collection.generic) ? This comes up saying do i want to change what i have written to system.collection.IEnumerable system.collection.IEnumerator system.collection.Generic.list(ofT) system.collection.queue system.collection.generic.IList(ofT) Many thanks Dan

                T 1 Reply Last reply
                0
                • W Wayne Gaylard

                  I assumed that the list of names and the list of scores would be previously declared. To be honest with you I would create a class Player in my app, and in that class you could have a function GetAllPlayers which would look like this :

                  Imports System.IO

                  Public Class Player
                  Implements IComparable
                  
                  Private strName As String
                  Private intHighScore As Integer
                  
                  Public Property Name() As String
                      Get
                          Return strName
                      End Get
                      Set(ByVal value As String)
                          strName = value
                      End Set
                  End Property
                  
                  Public Property HighScore() As Integer
                      Get
                          Return intHighScore
                      End Get
                      Set(ByVal value As Integer)
                          intHighScore = value
                      End Set
                  End Property
                  
                  Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
                  
                      Dim OtherPlayer As Player = CType(obj, Player)
                      Return Me.HighScore - OtherPlayer.HighScore
                  
                  End Function
                  
                  Shared Function GetAllPlayers(ByVal FileName As String) As List(Of Player)
                  
                      Dim lstPlayers As New List(Of Player)
                      Dim strFilename As String = FileName
                      Using srScores As New StreamReader(strFilename)
                          While Not srScores.EndOfStream
                              Dim newPlayer As New Player
                              Dim strRead As String = srScores.ReadLine
                              Dim strPlayerProperties() As String = Split(strRead, ",")
                              newPlayer.Name = strPlayerProperties(0)
                              newPlayer.HighScore = strPlayerProperties(1)
                              lstPlayers.Add(newPlayer)
                          End While
                      End Using
                      Return lstPlayers
                  
                  End Function
                  

                  End Class

                  Then you can declare a list(Of Player) in your main form and populate it like this :

                  Private Sub Form1\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                  
                     Try
                          lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)
                          lstPlayers.Sort()
                          For i As Integer = 0 To lstPlayers.Count - 1
                              ListBox1.Items.Add(lstPlayers(i).Name & ", " & lstPlayers(i).HighScore)
                          Next
                      Catch ex As System.IO.IOException
                          MsgBox("There was an error retrieving High Scores.")
                      End Try
                  
                  End Sub
                  

                  This is very simple but a good way to start thinking in a more structured way.

                  O Offline
                  O Offline
                  offroaderdan
                  wrote on last edited by
                  #9

                  This LOOKS pretty awsome :D I have one error and i don't actually know why.

                  lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)

                  VB doesn't like .High Scores File. This is probably something stupid whch i've done but i can't work out why that doesn't like it? Thanks again Dan

                  W 1 Reply Last reply
                  0
                  • O offroaderdan

                    Thanks the man from U.N.C.L.E so are you saying that the following code would become name = New list(of system.collection.generic) ? This comes up saying do i want to change what i have written to system.collection.IEnumerable system.collection.IEnumerator system.collection.Generic.list(ofT) system.collection.queue system.collection.generic.IList(ofT) Many thanks Dan

                    T Offline
                    T Offline
                    The Man from U N C L E
                    wrote on last edited by
                    #10

                    Other way round:

                    New System.Collections.Generic.List(Of String)

                    If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

                    O 1 Reply Last reply
                    0
                    • T The Man from U N C L E

                      Other way round:

                      New System.Collections.Generic.List(Of String)

                      If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

                      O Offline
                      O Offline
                      offroaderdan
                      wrote on last edited by
                      #11

                      Sorry, I just tried that, so the code is

                      names = New System.Collections.Generic.List(Of String)

                      but it comes up with an error as well as a blue squigly underneath saying it cannot be converted to '1 dimensional array of string?? I thank you for your patience Dan

                      T 1 Reply Last reply
                      0
                      • O offroaderdan

                        Sorry, I just tried that, so the code is

                        names = New System.Collections.Generic.List(Of String)

                        but it comes up with an error as well as a blue squigly underneath saying it cannot be converted to '1 dimensional array of string?? I thank you for your patience Dan

                        T Offline
                        T Offline
                        The Man from U N C L E
                        wrote on last edited by
                        #12

                        No worries. Sounds like you have left the declaration of your variable as Dim names as string(). You need to change that to a List(Of as well. E.g.

                        Dim names = System.Collections.Generic.List(Of String)
                        names = New System.Collections.Generic.List(Of String)()

                        Or

                        If you have knowledge, let others light their candles at it.
                        Margaret Fuller (1810 - 1850)
                        [My Articles]  [My Website]

                        O 1 Reply Last reply
                        0
                        • T The Man from U N C L E

                          No worries. Sounds like you have left the declaration of your variable as Dim names as string(). You need to change that to a List(Of as well. E.g.

                          Dim names = System.Collections.Generic.List(Of String)
                          names = New System.Collections.Generic.List(Of String)()

                          Or

                          If you have knowledge, let others light their candles at it.
                          Margaret Fuller (1810 - 1850)
                          [My Articles]  [My Website]

                          O Offline
                          O Offline
                          offroaderdan
                          wrote on last edited by
                          #13

                          Thanks a lot I have decided to show the code that i am using from start to fininsh. I am using 1 button called comtest 2 list boxes called listBox1 and ListBox2 2 textboxes called text1 and text2

                          Imports System.IO

                          Public Class Form1
                          Dim scores = New System.Collections.Generic.List(Of String)
                          Dim names = New System.Collections.Generic.List(Of String)
                          Dim test1(0 To 10) As String
                          Dim test2(0 To 10) As Integer
                          Dim userscore As Integer
                          Dim username As String
                          Dim a As Integer
                          Dim b As Integer
                          Dim i As Integer
                          Dim strFilename As String = ("High Scores.txt")

                          Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

                              Call highscore()
                              names = New System.Collections.Generic.List(Of String)
                              scores = New System.Collections.Generic.List(Of Integer)
                              Dim srScores As New IO.StreamReader(strFilename)
                              While Not srScores.EndOfStream
                                  Dim strRead As String = srScores.ReadLine
                                  ListBox1.Items.Add(strRead)
                                  Dim strSplit() As String = Split(strRead, ",")
                                  names.Add(strSplit(0))
                                  scores.Add(strSplit(1))
                              End While
                              srScores.Close()
                          
                          
                          End Sub
                          

                          Private Sub comtest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comtest.Click
                          username = Text1.Text
                          userscore = Val(Text2.Text)
                          For i = 1 To 10
                          a = scores(i)
                          If userscore >= a Then
                          test1(i) = username
                          test2(i) = userscore
                          For b = i + 1 To 10
                          test1(b) = names(b - 1)
                          test2(b) = scores(b - 1)
                          Next
                          Call newscore()
                          Exit Sub
                          End If
                          test1(i) = names(i)
                          test2(i) = scores(i)
                          Next
                          End Sub
                          Private Sub highscore()
                          For i = 1 To 10
                          ListBox1.Items.Add(names(i))
                          List2.Items.Add(scores(i))
                          Next
                          End Sub
                          Private Sub newscore() ' write
                          ListBox1.ClearSelected()
                          List2.ClearSelected()
                          For i = 1 To 10
                          ListBox1.Items.Add(test1(i))
                          List2.Items.Add(test2(i))
                          names(i) = test1(i)
                          scores(i) = test2(i)
                          Next
                          Dim objWriter As New System.IO.StreamWriter(highScoresFile)

                          For i = 1 To 10
                              objWriter.Write(names(i) & "," & scores(i))
                          
                          Next
                          objWriter.Close()
                          

                          End Sub

                          This is the VB6 version with the same properties

                          Dim scores(1 To 10) As

                          1 Reply Last reply
                          0
                          • O offroaderdan

                            This LOOKS pretty awsome :D I have one error and i don't actually know why.

                            lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)

                            VB doesn't like .High Scores File. This is probably something stupid whch i've done but i can't work out why that doesn't like it? Thanks again Dan

                            W Offline
                            W Offline
                            Wayne Gaylard
                            wrote on last edited by
                            #14

                            Hi there. Sorry it is my fault, I forgot to mention that where ever possible it is not a good idea to hardcode things like Filenames, Connectionstrings, etc into your app. The best way to do this is to use your Application.Settings file which is automatically generated for you by VS. To access the settings file, right click on your project in Solution Explorer, select properties and a form should open up with various tabs to set up options for your app. Select Settings tab and there you can store application specific settings such as file names and connection strings. To set up HighScoresFile, type the name HighScoresFile under name, under type select string, under scope select application, and under value put the full address of the file. To access any of your settings then from your app you call My.Settings.'insert setting name here'. When considering where to put the file, you need to take into account where you will deploy the application and where the High Scores file will actually be kept when the app has been deployed on other machines. Hope this helps.

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups