Reputation: 21
So my teacher wants the class to search a file for an authors name and display all the info on that author in a text box like a mailing label.
Here is my code i added a picture below. I'm really lost as to getting the program to take the Authors string and search another file. I can display the Authors name prefectly but how do you search another file for that name and display the information on that line about the author?
Imports System.IO
Public Class Form1
' CSCI 6
' Alex Smutny
' Lab #3
'
' DATE: 3/1/2013
Dim SR As IO.StreamReader
' initial start spot for the record Count
Dim RecordCount As Integer = 0
Dim Author As String = File.ReadAllText("Authors.txt")
Private Sub btnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles quitBtn.Click
' Properly Exits the application.
Me.Close()
End Sub
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles closeBtn.Click
readBtn.Text = "Read"
SR.Close()
' Changes the button statuses Locked or unlocked and sets default settings.
openBtn.Enabled = True
quitBtn.Enabled = True
readBtn.Enabled = False
closeBtn.Enabled = False
SearBtn.Enabled = False
RecordCount = 0
recordNum.Clear()
bookNum.Clear()
isbnNum.Clear()
bookTitle.Clear()
authorName.Clear()
bookPrice.Clear()
bookQuanity.Clear()
reorderPoint.Clear()
End Sub
Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openBtn.Click
' Sets the file to read from and opens it.
SR = IO.File.OpenText("Books.Txt")
' Changes the status of the buttons again now that the File is open and ready to read.
openBtn.Enabled = False
quitBtn.Enabled = False
readBtn.Enabled = True
closeBtn.Enabled = True
SearBtn.Enabled = True
End Sub
Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles readBtn.Click
'Changes the Read button to say next because it makes more since.
readBtn.Text = "Next"
' Setting all the variables.
Dim srIndex1 As Integer = 18
Dim srTitle As Integer
Dim srAuthor As Integer
Dim srPrice As Integer
Dim srDPrice As Double
Dim srData As String
Dim srLength As Integer
If SR.Peek() = -1 Then
MessageBox.Show("End of file")
Else
' Starts to read
srData = SR.ReadLine
' Increment counter by 1.
RecordCount = RecordCount + 1
' Determine the record length.
srLength = srData.Length
' gets the book number
bookNum.Text = srData.Substring(0, 3)
' ISBN number
isbnNum.Text = srData.Substring(4, 13)
' Book title
For srTitle = 1 To srLength Step 1
If srData.Substring(srIndex1 + srTitle, 1) = "," Then
bookTitle.Text = srData.Substring(srIndex1, srTitle)
srIndex1 = srIndex1 + srTitle + 1
srTitle = srLength + 1
End If
Next
' Book Author
For srAuthor = 1 To srLength Step 1
If srData.Substring(srIndex1 + srAuthor, 1) = "," Then
authorName.Text = srData.Substring(srIndex1, srAuthor)
srIndex1 = srIndex1 + srAuthor + 1
srAuthor = srLength + 1
Author = authorName.Text
End If
Next
' Book Price
For srPrice = 1 To srLength Step 1
If srData.Substring(srIndex1 + srPrice, 1) = "," Then
srDPrice = CDbl(srData.Substring(srIndex1, srPrice))
bookPrice.Text = srDPrice.ToString("C")
srIndex1 = srIndex1 + srPrice + 1
srPrice = srLength + 1
End If
Next
' Quanity
bookQuanity.Text = srData.Substring(srIndex1, 2)
srIndex1 = srIndex1 + 3
' Reorder Point
reorderPoint.Text = srData.Substring(srIndex1, 2)
End If
' record count
recordNum.Text = RecordCount
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
openBtn.Enabled = True
quitBtn.Enabled = True
readBtn.Enabled = False
closeBtn.Enabled = False
SearBtn.Enabled = False
End Sub
Private Sub SearBtn_Click(sender As System.Object, e As System.EventArgs) Handles SearBtn.Click
SR = IO.File.OpenText("Authors.Txt")
SR.Close()
readBtn.Text = "Restart"
RecordCount = 0
SR = IO.File.OpenText("Books.Txt")
End Sub
End Class
Authors File http://pastebin.com/t7C8ye9e Books File http://pastebin.com/y6DNyUFd
So my goal is to just get the info for the current author and then get it from the other file and take out all trailing spaces and just display it as a mailing label.
Upvotes: 0
Views: 6784
Reputation: 3228
There's a variety of good ways to do this. Let's, for now, assume that there's one author per line. If there is, you can get the entire string with My.Computer.FileSystem.ReadAllText()
and use String.Split(Environment.NewLine)
to split it on each new line. At any rate, you need to have some way to separate each author in the list. String.Split
returns an array of String objects. You can then iterate through the array to determine if a term matches the search. Here's an example of a for loop.
'... search term given in param
'... after loading text file
Dim StrArr() As String
StrArr = AuthorsString.Split(Environment.NewLine)
Dim i as Integer
For i=0 to StrArr.Length - 1 Step 1
If StrArr(i).toLower = SearchTerm.toLower Then
'String is a match! Case insensitivity should make it a little easier for the user.
End If
Next
Let me know if you have any questions.
Upvotes: 1