Прочитать текстовый файл и найти название книг данного автора, изданных с определенного года

belnowy

Картотека содержит сведения о каждой книге: фамилия автора, название и год издания. 1. Создать текстовый файл, содержащий фамилию автора, название книги, год издания. 2. Прочитать текстовый файл и найти название книг данного автора, изданных с определенного года. Фамилию автора и год ввести с клавиатуры в соответствующие поля. ______ Есть готовая программа , но она с текстурой. Как ее доработать?
Public Class Картотека
    Dim n As Integer 'количество записей n
    Private Structure Knigi
        Public Avtor As String
        Dim Nazvanie As String
        Dim Data As Integer
    End Structure
    Dim MyKniga(100) As Knigi
    Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        If TextBox1.Text = "" Or
            TextBox2.Text = "" Or
            TextBox3.Text = "" Then
            MessageBox.Show("Повторите ввод данных ", "ОШИБКА!!!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            GoTo zzz
        End If
        Static k As Integer 'Статическая переменная k, в начале k=0
        MyKniga(k).Avtor = Trim(TextBox1.Text)
        MyKniga(k).Nazvanie = Trim(TextBox2.Text)
        MyKniga(k).Data = Val(TextBox3.Text)
        MessageBox.Show("Данные введены", "ВНИМАНИЕ!", MessageBoxButtons.OK, MessageBoxIcon.Information)
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox6.Text = ""
        k = k + 1
        ToolStripStatusLabel1.Text = "Всего записей: " + CStr(k)
        n = k   'Присвоение глобальной переменной количество записей
zzz:
    End Sub
 
    Private Sub LinkLabel2_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked
        Dim writer As String = Trim(TextBox4.Text)
        Dim publ As Integer = Val(TextBox5.Text)
        Dim knSelection As Knigi() = (MyKniga.Where(Function(tt) tt.Avtor = writer And tt.Data >= publ)).ToArray
        If TextBox4.Text = "" Or
            TextBox5.Text = "" Then
            MessageBox.Show("Повторите ввод данных ", "ОШИБКА!!!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            GoTo mmm
        End If
        If knSelection.Length > 0 Then
            Dim ss As String = ""
            For Each kn As Knigi In knSelection
                ss &= ("Название книги: " & kn.Nazvanie & vbCrLf)
                'ss &= ("Автор: " & kn.Avtor & " Название книги: " & kn.Nazvanie & " Дата изадния: " & kn.Data & vbCrLf)
            Next
            TextBox6.Text = ss
        Else
            MessageBox.Show("Таких книг нет", "ОШИБКА!!!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
 
        End If
mmm:
    End Sub
    Private Sub textbox4_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.MouseClick
        TextBox6.Clear()
    End Sub
    Private Sub textbox5_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.MouseClick
        TextBox6.Clear()
    End Sub
End Class
Форма
Кликните здесь для просмотра всего текста
1 ответ

belnowy

Создал файл , а при на нахождении книги - остановился...
 Private Sub LinkLabel2_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked
        Dim MyFile1 As String = "Книги.txt"  ' Имя файла
        Dim Avtor, Kniga, Data As String
        Try
            Dim MyFileStream As New StreamReader(MyFile1)    ' Создание экземпляра класса StreamReader
 
            'Поиск пассажиров, у которых вес багажа превышает средний вес
            MyFileStream = New StreamReader(MyFile1) 'Установка маркера записи на первую
            Do
                Dim writer As String = Trim(TextBox4.Text)
                Dim publ As Integer = Val(TextBox5.Text)
                Dim knSelection As Knigi() = (MyKniga.Where(Function(tt) tt.Avtor = writer And tt.Data >= publ)).ToArray
                If TextBox4.Text = "" Or
                    TextBox5.Text = "" Then
                    MessageBox.Show("Повторите ввод данных ", "ОШИБКА!!!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                    GoTo mmm
                End If
                If knSelection.Length > 0 Then
                    Dim ss As String = ""
                    For Each kn As Knigi In knSelection
                        ss &= ("Название книги: " & kn.Nazvanie & vbCrLf)
                    Next
                    TextBox6.Text = ss
                Else
                    MessageBox.Show("Таких книг нет", "ОШИБКА!!!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
 
                End If
mmm:
                'Avtor = Trim(MyFileStream.ReadLine())
                'If Kniga = "" Then Exit Do
                'sBilet = Trim(MyFileStream.ReadLine())
                'sVes = Trim(MyFileStream.ReadLine())
                'If Val(sVes) > sred Then
                '    TextBox1.Text += sFIO + Space(2) + sVes + vbCrLf
                'End If
            Loop
            MyFileStream.Close()
        Catch ex As Exception
            MessageBox.Show("Файл Книги.txt не найден!", _
                            "ОШИБКА ОТКРЫТИЯ ФАЙЛА", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.Close()
        End Try
Подправьте пожалуйста.