I have visual basic 2010 windows application assignment in which I have to populate a one dimensional array from a text file stored in the projects debug folder. The text file is 6 five digit numbers on seperate lines. One number was typed then enter was pressed 6 times. The following is copied and pasted from the text file:
25000
35000
55000
70000
80200
90500
I have to populate a one dimensional array. This is the declaration I am using: Dim intSalaries() As Integer. I'm new to this and taking an advanced visual basic programming course on line and struggling. Any help will be appreciated.
benscomputers 0 Newbie Poster
Reverend Jim 4,968 Hi, I'm Jim, one of DaniWeb's moderators. Moderator Featured Poster
Note that this does no error checking - it assumes that all of the strings represent numbers.
Dim strings() As String = System.IO.File.ReadAllLines("D:\temp\test.txt")
Dim numbers(UBound(strings)) As Integer
For i = 0 To UBound(strings)
numbers(i) = CInt(strings(i))
Next
A version that checks but does not strictly speaking use an array is
Dim numbers As New List(Of Integer)
For Each line As String In System.IO.File.ReadAllLines("D:\temp\test.txt")
If IsNumeric(line) Then
numbers.Add(CInt(line))
End If
Next
benscomputers 0 Newbie Poster
Thank myou for posting so quickly. The actual assignment is to modify the following code:
Public Class frmMain
Private Sub btnExit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.Click
Me.Close()
End Sub
Private Sub btnDisplay_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
' displays the salary amount associated with a code
Dim intSalaries() As Integer = {25000, 35000, 55000, 70000, 80200, 90500}
Dim strInputCode As String
Dim intCode As Integer
Dim intSub As Integer
strInputCode = InputBox("Salary code (1 - 6)", "Salary")
Integer.TryParse(strInputCode, intCode)
' subtract 1 from the code to get the appropriate subscript
intSub = intCode - 1
If intSub >= 0 AndAlso intSub < intSalaries.Length Then
lblSalary.Text = intSalaries(intSub).ToString("C2")
Else
lblSalary.Text = String.Empty
MessageBox.Show("The salary code must be from 1 through 6.",
"Salary", MessageBoxButtons.OK,
MessageBoxIcon.Information)
End If
End Sub
End Class
In this version the array is declared with the salary amount given. There is a button(btnDisplay) and a label for output. I am to modify the code to populate the array from a text file(salary.txt) stored in the debug folder of the solution. The inputbox asks for a code(1-6) and the number corresponds to the position of the numbers stored in the array. Once again, thanks for your help. - Ben
Reverend Jim 4,968 Hi, I'm Jim, one of DaniWeb's moderators. Moderator Featured Poster
You can use the second form (List). Just replace intSalaries.Length with intSalaries.Count as in
Private Sub btnDisplay_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
' displays the salary amount associated with a code
Dim intSalaries As New List(Of Integer)
For Each line As String In System.IO.File.ReadAllLines("D:\temp\test.txt")
If IsNumeric(line) Then
intSalaries.Add(CInt(line))
End If
Next
Dim strInputCode As String
Dim intCode As Integer
Dim intSub As Integer
strInputCode = InputBox("Salary code (1 - 6)", "Salary")
Integer.TryParse(strInputCode, intCode)
' subtract 1 from the code to get the appropriate subscript
intSub = intCode - 1
If intSub >= 0 AndAlso intSub < intSalaries.Count Then
lblSalary.Text = intSalaries(intSub).ToString("C2")
Else
lblSalary.Text = String.Empty
MessageBox.Show("The salary code must be from 1 through 6.",
"Salary", MessageBoxButtons.OK,
MessageBoxIcon.Information)
End If
End Sub
Except you probably don't want to read the values every time the button is clicked. You'd initialize the List once on Form Load.
benscomputers 0 Newbie Poster
Private Sub btnDisplay_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
' displays the salary amount associated with a code
Dim intSalaries As New List(Of Integer)
For Each line As String In System.IO.File.ReadAllLines("D:\temp\test.txt")
If IsNumeric(line) Then
intSalaries.Add(CInt(line))
End If
Next
Dim strInputCode As String
Dim intCode As Integer
Dim intSub As Integer
strInputCode = InputBox("Salary code (1 - 6)", "Salary")
Integer.TryParse(strInputCode, intCode)
' subtract 1 from the code to get the appropriate subscript
intSub = intCode - 1
If intSub >= 0 AndAlso intSub < intSalaries.Count Then
lblSalary.Text = intSalaries(intSub).ToString("C2")
Else
lblSalary.Text = String.Empty
MessageBox.Show("The salary code must be from 1 through 6.",
"Salary", MessageBoxButtons.OK,
MessageBoxIcon.Information)
End If
End Sub
Worked perfectly. Thank you. That's what's up!
TnTinMN 418 Practically a Master Poster
Hi,
Since you are a student, I wanted to show you two other methods for reading a text file as you have described. The second one is just for fun; I would not recommend it.
For your needs the ReadAllLines method shown by Jim is fine, but if the file is large you are unnecessarily storing a large amount of text. Additionally the maximum size of .Net object (string) is 2 GB (1Gig of unicode characters), so it could become an issue.
Private ValueArray() As Int32
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim values As New List(Of Int32)
Dim fs As IO.Stream = IO.File.OpenRead("data.txt") 'open file in the executable folder
Dim sr As New IO.StreamReader(fs) 'create a stream reader to read the file
Dim line As String
While sr.Peek >= 0
Try
line = sr.ReadLine
values.Add(CType(line, Int32))
Catch ex As Exception
'skip line
'could display message about bad data
'MsgBox("bad data: " & line)
End Try
End While
sr.Close()
'put the values into the array per your assignment
ValueArray = values.ToArray
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'for a blast from the past
Dim values As New List(Of Int32)
Dim fn As Int32 = Microsoft.VisualBasic.FreeFile
Microsoft.VisualBasic.FileOpen(fn, "data.txt", OpenMode.Input)
Dim line As String
While Not Microsoft.VisualBasic.EOF(fn)
Try
line = Microsoft.VisualBasic.LineInput(fn)
values.Add(CType(line, Int32))
Catch ex As Exception
'skip line
'could display message about bad data
'MsgBox("bad data: " & line)
End Try
End While
Microsoft.VisualBasic.FileClose(fn)
'put the values into the array per your assignment
ValueArray = values.ToArray
End Sub
Edited by TnTinMN
benscomputers 0 Newbie Poster
Thank you for the knowledge. I am bookmarking this page because we have a final coming up and we are allowed to use whatever resources we want. This is gold to me.
jeremy.lawrence.7587 0 Newbie Poster
So if you did want to initialize on the load event like Jim had said, how would you go about doing that?
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.