Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 197
1

Чтение текстового файла блоками

02.10.2023, 15:23. Показов 711. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Есть текстовый файл вида:

#---Qs1---
text1
text2
text3
#---Ls1---
text1
#---Zs1---
text1
text2


подскажите, как можно прочитать значение блоками?
и занести результат в listbox?

На форме есть combobox, в который занесены имена блоков: Qs1, Ls1, Zs.
При выборе значения в combobox необходимо занести значения выбранного блока в ListBox.

Например, выбран блок Zs1 и в Listbox должны быть занесены значения блока Zs1 - это text1, text2.

P\s имена блоков и имена значений блоков указаны для примера.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.10.2023, 15:23
Ответы с готовыми решениями:

Чтение из текстового файла.
Здравия желаю. Не пойму как же выделять куски стринга из текстового файла и присваивать их переменным- в двух первых кодах. кусок стринга...

Чтение текстового файла посимвольно в переменную
Задача: необходимо посимвольно читать бинарный или текстовый (два варианта) файл в переменную. То есть переменная должна периодически...

Чтение строки по таймеру из текстового файла
Добрый день. имеется файл текстовый 13:14 Новосельского 13:22 Победы 13:37 Истории 13:53 Революционная 14:06 малая 14:17 ленина...

9
2226 / 1547 / 393
Регистрация: 26.06.2017
Сообщений: 4,464
Записей в блоге: 1
02.10.2023, 16:16 2
В соответствии с общепринятыми принципами нужно описать класс, а при чтении данных из файла создавать экземпляры этого класса и собирать их в коллекцию.
Что-то типа того
VB.NET Скопировано
1
2
3
4
Public Class UserData
  Public Property Name As String
  Public Property Texts As List(Of String)
End Class
Тогда и combobox, и Listbox можно будет привязать к этой коллекции и всё будет автоматизировано как вы желаете.
2
1543 / 1506 / 324
Регистрация: 03.10.2012
Сообщений: 1,542
02.10.2023, 18:45 3
Добавлю к вышесказанному. Такие данные удобнее хранить в структурированных текстовых файлах: XML или JSON. Это сильно упрощает сериализацию/десериализацию.
0
Любитель
 Аватар для Тим70
1023 / 722 / 158
Регистрация: 27.01.2019
Сообщений: 1,456
02.10.2023, 20:25 4
KwaZZi, Танец с бубном.
Текстовый фаил изменил так

#---Qs1---
text1
text2
text3
#---Ls1---
text1
#---Zs1---
text1
text2
#
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
Imports System.Text.RegularExpressions
Public Class Form1
    Dim A1, A, A2, A3, d(), Rez1 As String
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ComboBox1.Items.Add("Qs1")
        ComboBox1.Items.Add("Ls1")
        ComboBox1.Items.Add("Zs")
        A = IO.File.ReadAllText("11.txt", System.Text.Encoding.Default)
    End Sub
 
    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        Dim Str As String
        ListBox1.Items.Clear()
        A1 = ComboBox1.SelectedItem
        If A1 = "Qs1" Then A2 = "#---Qs1---" : A3 = "#---Ls1---"
        If A1 = "Ls1" Then A2 = "#---Ls1---" : A3 = "#---Zs1---"
        If A1 = "Zs" Then A2 = "#---Zs1---" : A3 = "#"
        Label2.Text = A2
        Label1.Text = A1
        '  Оставляем между заданными словами
        Str = Regex.Match(A, A2 & "(.*?)" & A3, RegexOptions.IgnoreCase Or RegexOptions.Singleline).Groups(0).Value
        Str = Str.Replace(A2, "")
        Str = Str.Replace(A3, "")
        d = Split(Str, vbNewLine)
        For i = 0 To UBound(d)
            ListBox1.Items.Add(d(i) & vbCrLf)
        Next
    End Sub
End Class
Добавлено через 22 минуты
Чтобы не было пустых строк 26 строку замените на
VB.NET Скопировано
1
For i = 1 To d.Count - 2
4
2226 / 1547 / 393
Регистрация: 26.06.2017
Сообщений: 4,464
Записей в блоге: 1
02.10.2023, 20:39 5
Плюсанул за труды, но решение не по феншую.
0
Любитель
 Аватар для Тим70
1023 / 722 / 158
Регистрация: 27.01.2019
Сообщений: 1,456
02.10.2023, 20:55 6
Цитата Сообщение от Uswer Посмотреть сообщение
решение не по феншую.
Поэтому и написал ,танец с бубнами. А с классами,ваше предложение, работать не умею.
0
 Аватар для Sklifosofsky
1080 / 911 / 212
Регистрация: 29.09.2015
Сообщений: 1,014
02.10.2023, 22:33 7
Возможно сложна...



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
Public Class Form1
    'На форме ComboBox и ListBox без дополнительных настроек, файл data.txt находится вместе с экзешником
 
    Private _dataSet As DataSet
    Private _bindingForCombo As BindingSource
    Private _bindingForList As BindingSource
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        _dataSet = New DataSet()
        Dim tblBlocks As DataTable = _dataSet.Tables.Add("Blocks")
        With tblBlocks 'таблица блоков [id,имя]
            .Columns.Add("BlockId", GetType(Integer))
            .Columns.Add("Name", GetType(String))
        End With
        Dim tblData As DataTable = _dataSet.Tables.Add("Data")
        With tblData 'таблица всех значений [id блока, значение]
            .Columns.Add("BlockId", GetType(Integer))
            .Columns.Add("Value", GetType(String))
        End With
 
        'связь между таблицами, по которой производится реляция таблицы блоков к значениям
        _dataSet.Relations.Add("RelationBlockId", tblBlocks.Columns("BlockId"), tblData.Columns("BlockId"), True)
 
        'класс осуществляет проводку сценариев данных к комбо и наоборот
        _bindingForCombo = New BindingSource(_dataSet, "Blocks")
 
        'привязка источника данных к комбо
        With Me.ComboBox1
            .DataSource = _bindingForCombo
            .DisplayMember = "Name"
        End With
 
        'здесь осуществляется привязка к источнику комбо и данные фильтруются по согласно реляции таблиц по выбранному значению
        _bindingForList = New BindingSource(_bindingForCombo, "RelationBlockId")
 
        'привязка источника данных к списку
        With Me.ListBox1
            .DataSource = _bindingForList
            .DisplayMember = "Value"
        End With
 
        'чтение данных и заполнение таблиц
        Using reader As New IO.StreamReader("Data.txt")
            Dim blockName As String = Nothing ' имя блока
            Dim blockId As Integer = -1       'id блока
            Do
                Dim line As String = reader.ReadLine()
                If line Is Nothing Then
                    Exit Do
                End If
 
                If line.StartsWith("#") Then
                    blockId += 1
                    blockName = line.Substring(4, line.IndexOf("-"c, 4) - 4)
                    tblBlocks.Rows.Add(blockId, blockName)
                Else
                    Debug.Assert(blockName IsNot Nothing) 'контроль правильности данных - данные должны начинаться с имени блока (вместо можно внедрить исключение)
                    'также можно проверять на blockId <> -1, а переменную blockName опустить
                    tblData.Rows.Add(blockId, line)
                End If
            Loop
        End Using
 
    End Sub
End Class
4
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,508
Записей в блоге: 2
02.10.2023, 23:43 8
Предложу вариант
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Private di As Dictionary(Of String, String())
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim s As String = IO.File.ReadAllText("11.txt", System.Text.Encoding.Default)
        Dim ss As String() = s.Split({"#"c}, StringSplitOptions.RemoveEmptyEntries)
        di = New Dictionary(Of String, String())
        For Each str As String In ss
            Dim ar = str.Split({vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
            Dim key = ar(0).Trim("-")
            Array.Copy(ar, 1, ar, 0, UBound(ar))
            Array.Resize(ar, UBound(ar))
            di.Add(key, ar)
        Next
        ListBox1.DataSource = di.Keys.ToArray
        ListBox1.SelectedIndex = 0
    End Sub
 
    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        ListBox2.DataSource = di.Values(ListBox1.SelectedIndex)
    End Sub
PS. Замечания:
- данные по структуре напоминают ini-файл;
- можно было бы построить класс в явном виде, как ранее предлагалось.
4
2226 / 1547 / 393
Регистрация: 26.06.2017
Сообщений: 4,464
Записей в блоге: 1
03.10.2023, 00:41 9
Ну и мой вариант с простецким сериализатором/десериализатором из класса/в класс, как я и писал выше.
Вложения
Тип файла: zip UserDataDeserializeDemoApp.zip (21.3 Кб, 17 просмотров)
5
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 197
03.10.2023, 09:59  [ТС] 10
Uswer, ovva, Sklifosofsky, Тим70,
Спасибо всем за предложенные варианты.
Буду разбираться!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2023, 09:59
Помогаю со студенческими работами здесь

Тест на наличие болезни (чтение с текстового файла)
Доброго времени суток. Требуется разработать тест, который считывает с файла &quot;Вопросы&quot; - все вопросы и один за одним выводит их...

Чтение из текстового файла строки и преобразование ее в массив
'Процедура открытия и вывода текстового файла в лист бокс. Sub OpenFile(ByVal FileName As String, ByRef a() As String, ByVal T As...

WebClient и VbNewLine. Чтение текстового файла со строками
Идиотизм. Полный. Простое приложение. Читает текстовый файл со строками в формате: строка 1 строка 2

Чтение файла блоками
Есть код, который работает: for (offset = 0; offset &lt; bfs.Length; offset += LenBuf) { bfs.Seek(offset,...

Чтение текстового файла
Здравствуйте! У меня такой вопрос... Пожалуйста, подскажите...:) Необходимо сказать сколько абзацев в текстовом файле, если эти абзацы...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Конвейеры данных с Apache Kafka
Javaican 16.03.2025
В мире, где данные стали новой нефтью, Apache Kafka зарекомендовал себя как мощный инструмент для построения надежных и масштабируемых конвейеров данных. Созданный изначально командой LinkedIn в 2011. . .
Deno против Node.js: Будущее JavaScript рантайма
run.dev 16.03.2025
За последнее десятилетие Node. js стал абсолютным лидером среди JavaScript-рантаймов и фактическим стандартом для серверной разработки на JavaScript. Но в 2018 году тот же разработчик, который создал. . .
SwiftUI или UIKit - что выбрать для нового приложения iOS?
mobDevWorks 16.03.2025
Когда Apple представила SwiftUI на WWDC 2019, многим показалось, что дни UIKit сочтены. Новый декларативный фреймворк предлагал радикально иной подход к разработке интерфейсов. Вместо кропотливого. . .
Docker: Руководство для начинающих по созданию первого приложения
Mr. Docker 16.03.2025
Docker — это платформа, которая упаковывает ваше приложение и все его зависимости в стандартизированные блоки, называемые контейнерами. Эти контейнеры изолированы друг от друга и от основной системы,. . .
парные условия и обработка кодов возврата (errorlevels)
jigi33 16.03.2025
Расширенная версия скобок условий, внутри неё могут быть использованы || (логическое или), & (логическое и) и логика генерации и обработки ошибок в BASH скриптах #!/ bin/ bash # Расширенная. . .
идеальная отладка в BASH скриптах
jigi33 16.03.2025
#!/ bin/ bash # VARIANT 1 - using keys -v or -xv # set -v - set verify mode OR # set -xv - set xtrace + verify mode (maximum detalization) OR # VARIANT 2 - ADD AVESOME BLOCK FOR DEBUGGING or. . .
Protobuf в Go и новый Opaque API
golander 15.03.2025
Распределенные системы опираются на эффективные протоколы обмена данными — о чем вы, скорее всего, прекрасно знаете, если работаете с микросервисной архитектурой. Protocol Buffers (Protobuf) от. . .
Преобразование строк в C++: std::from_chars от C++17 до C++26
NullReferenced 15.03.2025
Конвертация строк в числа — задача, с которой сталкивается практически каждый C++ разработчик. Несмотря на кажущуюся простоту, эта операция таит множество подводных камней и неочевидных последствий. . .
Управление памятью в Java и новые сборщики мусора
Javaican 15.03.2025
Эффективное управление памятью всегда было ахиллесовой пятой высоконагруженных Java-приложений. При разработке на Java мы обычно полагаемся на автоматическое управление памятью через сборщики мусора. . .
Angular или Svelte - что выбрать?
Reangularity 15.03.2025
Во фронтенд-разработке Angular и Svelte представляют собой два совершенно разных подхода к решению схожих задач. Один — полноценный, мощный монолит с корпоративной поддержкой, другой — компактный,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер