0

そのため、教師は、クラスでファイルから著者名を検索し、その著者に関するすべての情報を宛名ラベルのようなテキスト ボックスに表示することを望んでいます。

これが私のコードです。下に写真を追加しました。Authors 文字列を取得して別のファイルを検索するようにプログラムを取得する方法について、私は本当に迷っています。著者名を完全に表示できますが、別のファイルでその名前を検索し、その行に著者に関する情報を表示するにはどうすればよいですか?

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

クラス終了

プログラム

著者ファイルhttp://pastebin.com/t7C8ye9e 書籍ファイルhttp://pastebin.com/y6DNyUFd

したがって、私の目標は、現在の作成者の情報を取得してから、他のファイルから取得し、末尾のスペースをすべて削除して、郵送ラベルとして表示することです。

4

1 に答える 1

1

これを行うには、さまざまな良い方法があります。ここでは、1 行に 1 人の作者がいると仮定しましょう。ある場合は、 で文字列全体を取得し、My.Computer.FileSystem.ReadAllText()を使用String.Split(Environment.NewLine)して新しい行ごとに分割できます。いずれにせよ、リスト内の各著者を区別する何らかの方法が必要です。String.SplitString オブジェクトの配列を返します。その後、配列を反復処理して、用語が検索に一致するかどうかを判断できます。for ループの例を次に示します。

'... 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

ご不明な点がございましたら、お知らせください。

于 2013-12-11T17:19:44.570 に答える