Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
13 / 13 / 6
Регистрация: 21.11.2013
Сообщений: 365
1

Поиск слова по шаблону

27.02.2016, 13:02. Показов 2178. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Прошу Вас помочь мне с задачкой. Мне необходимо реализовать ввод данных, связывание и поиск по шаблону как автора, так и книги. Например, по шаблону АА* - должен выводиться список книг авторов, подходящих под этот шаблон.

Я тут накидал все сохраняет, а как реализовать поиск не соображу.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Public Class Form1
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If (LastName1.Text = "" Or BookName.Text = "") Then
            MsgBox("Введены некоректные данные")
            Return
        End If
 
        Dim Name As String
        Name += LastName1.Text + Space(15 - Len(LastName1.Text))
        Name += LastName2.Text + Space(15 - Len(LastName2.Text))
        FileOpen(1, "LastName.dat", OpenMode.Random, , , 34)
        FilePutObject(1, Name, 1 + LOF(1) / 34)
        FileClose(1)
 
        Dim Name2 As String
        Name2 += BookName.Text + Space(15 - Len(BookName.Text))
        FileOpen(2, "BookName.dat", OpenMode.Random, , , 34)
        FilePutObject(2, Name2, 1 + LOF(2) / 34)
        FileClose(2)
 
        LastName1.Text = ""
        LastName2.Text = ""
        BookName.Text = ""
    End Sub
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If (CardNumber.Text = "") Then
            MsgBox("Запрос неверный")
            Return
        End If
 
        Dim Name As String
        FileOpen(1, "LastName.dat", OpenMode.Random, , , 34)
        FileGetObject(1, Name, Val(CardNumber.Text))
        FileClose(1)
 
        Label6.Text = Mid(Name, 1, 15)
        Label12.Text = Mid(Name, 16, 15)
 
        Dim Name2 As String
        FileOpen(2, "BookName.dat", OpenMode.Random, , , 34)
        FileGetObject(2, Name2, Val(CardNumber.Text))
        FileClose(2)
        Label7.Text = Mid(Name2, 1, 15)
 
    End Sub
 
End Class
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2016, 13:02
Ответы с готовыми решениями:

QRegExp поиск всех строк которые соответствуют шаблону и поиск их длины
//поиск строк типа ] QRegExp reg("\\\\]"); QString text = "test ] bla ]"; int pos =...

Поиск в текстовом файле последовательностей цифр по шаблону и последующий их поиск в именах файлов (с логом)
Уважаемые программисты и хорошие люди! К Вам обращается украинский юрист. Очень нужен bat-файл...

Поиск в текстовых файлах символьных групп по шаблону и последующий поиск найденных в именах файлов (с логом)
Господа программисты! Прошу помочь в таком вопросе! Исходные данные: Последовательности...

Поиск в тексте DOC-файлов последовательностей символов по шаблону и поиск найденных в TXT-файле (с логом)
Уважаемые программисты! Очень нужен bat-файл или скрипт, который решает такую задачу: ...

11
13 / 13 / 6
Регистрация: 21.11.2013
Сообщений: 365
27.02.2016, 14:48  [ТС] 2
Вид формы на всякий случай))
Миниатюры
Поиск слова по шаблону  
0
13 / 13 / 6
Регистрация: 21.11.2013
Сообщений: 365
27.02.2016, 14:49  [ТС] 3
Пожалуйста, помогите
0
4407 / 3531 / 843
Регистрация: 02.02.2013
Сообщений: 3,417
Записей в блоге: 2
27.02.2016, 15:11 4
Впечатление, что код скопирован из предыдущих версий Basic. Например, вот это
VB.NET
1
2
3
Dim Name As String
Name += LastName1.Text + Space(15 - Len(LastName1.Text))
Name += LastName2.Text + Space(15 - Len(LastName2.Text))
легко заменяется на более современное
VB.NET
1
2
3
Dim fix As Integer = 15
Dim Name As String = String.Empty
Name &= LastName1.Text.PadRight(fix) & LastName2.Text.PadRight(fix)
Но самое главное непонятно зачем хранить данные в двух файлах с произвольным доступом. Ну если режим доступа критичен то уж хотя бы в одном файле.

Добавлено через 8 минут
Например, по шаблону АА* - должен выводиться список книг авторов, подходящих под этот шаблон
Судя по вашей форме вывод списка ("книг авторов ") не предполагается. И непонятно причем тут номер карточки и что это такое (номер записи?).
1
13 / 13 / 6
Регистрация: 21.11.2013
Сообщений: 365
27.02.2016, 16:37  [ТС] 5
ovva, У меня задание такое: Реализовать простейшую базу данных на основе файлов прямого доступа.
В базе данных 3 таблицы:
• таблица авторов с полями код и ФИО автора;
• таблица книг с полями код и наименование книги;
• связующая таблица, реализующая связь много-ко-многим (т.е. у каждого автора может быть несколько книг, у каждой книги несколько авторов) в форме полей: код_автора и код_книги.
Реализовать ввод данных, связывание и поиск по шаблону как авто-ра, так и книги. Например, по шаблону АА* должен выводиться спи-сок книг авторов, подходящих под этот шаблон.

А как правильно делать?
0
4407 / 3531 / 843
Регистрация: 02.02.2013
Сообщений: 3,417
Записей в блоге: 2
27.02.2016, 20:15 6
Лучший ответ Сообщение было отмечено Виктор27 как решение

Решение

Будут созданы три файла author.dat, book.dat, relation.dat представляющие базу данных.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
Imports System.IO
Public Class Form6
    Private fldStr As Integer = 25 'размеры полей
    Private fldId As Integer = 5
    Private lstA As List(Of atBook) 'списки авторов, книг, связей
    Private lstB As List(Of atBook)
    Private lstID As List(Of ID2)
    'структура для авторов, книг
    Private Structure atBook
        Public ID As Integer
        Public Name As String
        Public Sub New(ByVal ii As Integer, ByVal nm As String)
            ID = ii
            Name = nm
        End Sub
    End Structure
    'структура для связей
    Private Structure ID2
        Public IDa As Integer
        Public IDb As Integer
        Public Sub New(ByVal ii1 As Integer, ByVal ii2 As Integer)
            IDa = ii1
            IDb = ii2
        End Sub
    End Structure
    Private Sub Form6_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'загрузка файлов
        If File.Exists("author.dat") Then
            lstA = readFile("author.dat")
        Else
            lstA = New List(Of atBook)
        End If
        If File.Exists("book.dat") Then
            lstB = readFile("book.dat")
        Else
            lstB = New List(Of atBook)
        End If
        If File.Exists("relation.dat") Then
            lstID = readFileID("relation.dat")
        Else
            lstID = New List(Of ID2)
        End If
    End Sub
    ''' <summary>
    ''' чтение файла данных
    ''' </summary>
    Private Function readFile(ByVal fName As String) As List(Of atBook)
        Dim lst As New List(Of atBook)
        Using Reader As New FileIO.TextFieldParser(fName)
            Reader.TextFieldType = FileIO.FieldType.FixedWidth
            Reader.SetFieldWidths(fldId, fldStr)
            Dim currentRow As String()
            While Not Reader.EndOfData
                Try
                    currentRow = Reader.ReadFields()
                    lst.Add(New atBook(CInt(currentRow(0)), currentRow(1)))
                Catch ex As FileIO.MalformedLineException
                    MsgBox("Запись " & ex.Message & " испорчена и будет пропущена.")
                End Try
            End While
        End Using
        Return lst
    End Function
    ''' <summary>
    ''' чтение файла индексов
    ''' </summary>
    Private Function readFileID(ByVal fName As String) As List(Of ID2)
        Dim lst As New List(Of ID2)
        Using Reader As New FileIO.TextFieldParser(fName)
            Reader.TextFieldType = FileIO.FieldType.FixedWidth
            Reader.SetFieldWidths(fldId, fldId)
            Dim currentRow As String()
            While Not Reader.EndOfData
                Try
                    currentRow = Reader.ReadFields()
                    lst.Add(New ID2(CInt(currentRow(0)), CInt(currentRow(1))))
                Catch ex As FileIO.MalformedLineException
                    MsgBox("Запись " & ex.Message & " испорчена и будет пропущена.")
                End Try
            End While
        End Using
        Return lst
    End Function
    ''' <summary>
    ''' сохранение файла данных
    ''' </summary>
    Private Sub writeFileID(ByVal fName As String, ByVal lst As List(Of ID2))
        Dim file As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(fName, False, System.Text.Encoding.Default)
        For Each ln As ID2 In lst
            Dim s As String = ln.IDa.ToString.PadRight(fldId) & ln.IDb.ToString.PadRight(fldId)
            file.WriteLine(s)
        Next
        file.Close()
    End Sub
    ''' <summary>
    ''' сохранение файла индексов
    ''' </summary>
    Private Sub writeFile(ByVal fName As String, ByVal lst As List(Of atBook))
        Dim file As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(fName, False, System.Text.Encoding.Default)
        For Each ln As atBook In lst
            Dim s As String = ln.ID.ToString.PadRight(fldId) & ln.Name.PadRight(fldStr)
            file.WriteLine(s)
        Next
        file.Close()
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If FIO.Text.Length = 0 OrElse bookName.Text.Length = 0 Then
            MsgBox("Введены некоректные данные")
            Return
        End If
        Dim aName As String = FIO.Text
        Dim isA As Boolean
        Dim indA As Integer = isExistName(aName, lstA)
        If indA < 0 Then
            If lstA.Count = 0 Then
                indA = 1
            Else
                Dim mx = (From r As atBook In lstA Select r.ID).ToArray.Max
                indA = mx + 1
            End If
            lstA.Add(New atBook(indA, aName))
            isA = True
        End If
        Dim bName As String = bookName.Text
        Dim indB As Integer = isExistName(bName, lstB)
        If indB < 0 Then
            If lstB.Count = 0 Then
                indB = 1
            Else
                Dim mx = (From r As atBook In lstB Select r.ID).ToArray.Max
                indB = mx + 1
            End If
            lstB.Add(New atBook(indB, bName))
            lstID.Add(New ID2(indA, indB))
        Else
            If isA Then
                lstID.Add(New ID2(indA, indB))
            Else
                Dim ii As New ID2(indA, indB)
                If Not lstID.Contains(ii) Then lstID.Add(ii)
            End If
        End If
    End Sub
    Private Function isExistName(ByVal ss As String, ByVal lst As List(Of atBook)) As Integer
        Dim ii As Integer = -1
        Dim rr = From r In lst Where r.Name = ss Select r.ID
        If rr.Count > 0 Then ii = rr(0)
        Return ii
    End Function
    ''' <summary>
    ''' сохранить базу
    ''' </summary>
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        writeFile("author.dat", lstA)
        writeFile("book.dat", lstB)
        writeFileID("relation.dat", lstID)
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        If authorName.Text.Length = 0 Then Exit Sub
        Dim nm As String = authorName.Text
        ListBox1.Items.Clear()
        Dim iiA As Integer = isExistName(nm, lstA)
        If iiA < 0 Then
            MsgBox("Автор не найден!")
            Exit Sub
        End If
        Dim sb = (From bi As ID2 In lstID Where bi.IDa = iiA Select bi.IDb).ToArray
        If sb.Length = 0 Then
            MsgBox("Книги не найдены!")
            Exit Sub
        End If
        Dim bnm = (From nn As atBook In lstB Where sb.Contains(nn.ID) Select nn.Name).ToArray
        For Each ss As String In bnm
            ListBox1.Items.Add(ss)
        Next
    End Sub
End Class
Миниатюры
Поиск слова по шаблону  
2
13 / 13 / 6
Регистрация: 21.11.2013
Сообщений: 365
28.02.2016, 15:56  [ТС] 7
ovva, Большое спасибо. А поиска нету, типа а* или аа*?
0
4407 / 3531 / 843
Регистрация: 02.02.2013
Сообщений: 3,417
Записей в блоге: 2
28.02.2016, 16:23 8
Приведу лишь код для поиска всех авторов отвечающих шаблону ххх*. Думаю, что далее вы сможете развить сами.
VB.NET
1
2
3
4
5
6
7
8
9
Private Function findA(ByVal str As String) As List(Of String)
    Dim lst As New List(Of String)
    For Each aa As atBook In lstA
        If aa.Name.StartsWith(str, StringComparison.CurrentCultureIgnoreCase) Then
            lst.Add(aa.Name)
        End If
    Next
    Return lst
End Function
В вашем случае findA должен возвращать и список индексов. Далее по этим индексам из lstID выбираете индексы книг ну и из lstB сами книги. Затем соединяете соответствующие строки авторов и книг и выдаете это в ListBox.
1
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
15.03.2020, 18:17 9
вопрос fio,authorName,bookname объявляли,просто ошибки выдает по поводу них не видел в коде нигде
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
18.03.2020, 13:59 10
Виктор27, или это файлы создавали?
0
Лень — мое второе и
3206 / 2397 / 684
Регистрация: 28.11.2014
Сообщений: 3,587
Записей в блоге: 3
18.03.2020, 14:04 11
Shamchik, очевидно, это имена текстбоксов
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 201
18.03.2020, 14:23 12
Для сохранения что ли информации?
0
18.03.2020, 14:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2020, 14:23
Помогаю со студенческими работами здесь

Поиск по шаблону
При реализации поиска по шаблону столкнулся со следующей проблемой: Шаблон: *abc Тест1: abc...

Поиск по шаблону * и?
Здраствуите можете помочь с малеьким таки заданием ,я пытался еа куралесить ну не получилось. я...

Поиск по шаблону
И вот к моему сожалению я не смог решить задачу: Дан текст и шаблон поиска на основе * и %....

Удалить слова из списка, соответствующие шаблону
Здраствуйте, помогите пожалуйста с программой. Задание такое, вводится предложение, потом оно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru