Alex Moneyy Amk
Alex Moneyy Amk

Reputation: 21

How to search a text file in Visual basic

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

Program

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

Answers (1)

Athena
Athena

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

Related Questions