Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157

Загрузить значения из файла в ListView

31.01.2016, 18:26. Показов 4864. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется файл (file.txt) в нем занесены значения в таком виде:

VB.NET
1
2
3
4
5
Название 1|-347|25|0|44|0
Название 2|-335|77|35|42|16
Название 3|-579|12|55|3|5
 
и т.д.
И имеется ListView с шестью колонками



Необходимо чтобы программа считывала файл и вставляла значения в соответствующие колонки, а также было 2 кнопки, первая вносит новое значения из нескольких textbox, а вторая удаляет выделенную строку.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2016, 18:26
Ответы с готовыми решениями:

Как из текстового файла поместить значения в listview с разбивкой по столбцам с разделителем |
Как из текстового файла поместить значения в listview с разбивкой по столбцам с разделителем |. код для listview With ListView1 ...

Как загрузить текст из "txt" файла в "listView" построчно?
Как загрузить текст из "txt" файла в "listView" построчно? Этот код: string strAllLines =...

Загрузить элементы в Listview
public class MainActivity extends ListActivity { TextView txt; MyTask mt; List<String> listz; @Override ...

23
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,593
Записей в блоге: 1
31.01.2016, 18:35
Ну у Вас же есть разделитель |, читайте строку сплитте
VB.NET
1
Split
и добавляйте listbox-у считанные поля
2
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.01.2016, 19:05  [ТС]
Цитата Сообщение от XIST Посмотреть сообщение
Ну у Вас же есть разделитель |, читайте строку сплитте
покажите пожалуйста пример для моего случая

Добавлено через 10 минут
Как тут применить split для моего случая?

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Private Sub Загрузить_Click(sender As Object, e As EventArgs) Handles Загрузить.Click
        Dim i As Integer
        'Очищаем список:
        Do Until ListView1.Items.Count = 0 'Удаляй по элементу, пока элементов не останется
            ListView1.Items(0).Remove() 'Индекс 0 потому, что при удалении элементы списка сдвигаются вверх
        Loop
        'Загружаем список:
        Dim Чтение As New System.IO.StreamReader("file.txt")
        i = 0
        Do While Чтение.Peek() <> -1
            'Добавляем в список очередную строку и одновременно заполняем ее первый столбец:
            ListView1.Items.Add(Чтение.ReadLine)
            ListView1.Items(i).SubItems.Add(Чтение.ReadLine) 'Заполняем второй столбец очередной строки
            ListView1.Items(i).SubItems.Add(Чтение.ReadLine) 'Заполняем третий столбец очередной строки
            i = i + 1
        Loop
        Чтение.Close()
    End Sub
0
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,593
Записей в блоге: 1
31.01.2016, 19:15
Давайте с азов. Вам нужен скорее всего массив, дибо словарь либо, но для начала так проще будет.
Вам необходимо запихать наверное файл в массив, правильно?
делаем нечто такое
VB.NET
1
        Dim read() As String = File.ReadAllLines(My.Application.Info.DirectoryPath & "\Data.txt")
далее скажите что будем делать?
1
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.01.2016, 19:21  [ТС]
Цитата Сообщение от XIST Посмотреть сообщение
Вам необходимо запихать наверное файл в массив, правильно?
Цитата Сообщение от XIST Посмотреть сообщение
далее скажите что будем делать?
Прошу прощения за мою тупость, но зачем нам весь файл пихать в массив?
0
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,593
Записей в блоге: 1
31.01.2016, 19:28
Наоборот спрашивайте!!
Делаем это для того, что бы было легче управлять данными файла. Хотя в программировании можно одно и тоже дело провернуть кучей способов, можно и построчно читать и делать манипуляции со строками. Но логичнее что, с таким маленьким объемом данных, легче все запихнуть в массив. И мы с Вами имеем перед собой, коробку, наполненную нужными нам с Вами деталями
0
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.01.2016, 19:32  [ТС]
Цитата Сообщение от XIST Посмотреть сообщение
Наоборот спрашивайте!!
Делаем это для того, что бы было легче управлять данными файла. Хотя в программировании можно одно и тоже дело провернуть кучей способов, можно и построчно читать и делать манипуляции со строками. Но логичнее что, с таким маленьким объемом данных, легче все запихнуть в массив. И мы с Вами имеем перед собой, коробку, наполненную нужными нам с Вами деталями
Хорошо. Мы считали файл в массив. Теперь надо нам извлечь все строки и каждую строку разбить на 6 значений которые потом надо вставить в listview. Тут я так понимаю и нужен Split?

Цитата Сообщение от XIST Посмотреть сообщение
Но логичнее что, с таким маленьким объемом данных, легче все запихнуть в массив.
В файле порядка 500-600 строк, это не сильно повлияет на производительность?
0
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,593
Записей в блоге: 1
31.01.2016, 19:34
Ерунда, я базы обрабатываю по 300-500k строк, вот там уже приходиться построчно обрабатывать и пихать в СУБД
0
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.01.2016, 20:58  [ТС]
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от ~Jack~ Посмотреть сообщение
Хорошо. Мы считали файл в массив. Теперь надо нам извлечь все строки и каждую строку разбить на 6 значений которые потом надо вставить в listview. Тут я так понимаю и нужен Split?
Так, что дальше делаем после считывания файла в массив?

Добавлено через 12 минут
Сделал так:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Private Sub Загрузить_Click(sender As Object, e As EventArgs) Handles Загрузить.Click
        Dim i As Integer
        'Очищаем список:
        Do Until ListView1.Items.Count = 0 'Удаляй по элементу, пока элементов не останется
            ListView1.Items(0).Remove() 'Индекс 0 потому, что при удалении элементы списка сдвигаются вверх
        Loop
        'Загружаем список:
        Dim Чтение As New System.IO.StreamReader("file.txt")
        i = 0
        Do While Чтение.Peek() <> -1
            'Добавляем в список очередную строку
            Dim drop() As String = Split(Чтение.ReadLine, "|")
            ListView1.Items.Add(drop(0))
            ListView1.Items(i).SubItems.Add(drop(1))
            ListView1.Items(i).SubItems.Add(drop(2))
            ListView1.Items(i).SubItems.Add(drop(3))
            ListView1.Items(i).SubItems.Add(drop(4))
            ListView1.Items(i).SubItems.Add(drop(5))
            i = i + 1
        Loop
        Чтение.Close()
    End Sub
Вроде работает

Добавлено через 52 минуты
Теперь подскажите как по нажатию кнопки сделать добавление/удаление, а то что-то у меня не выходит.

Вот так я удаляю:

VB.NET
1
2
3
4
5
6
7
8
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        For i = ListView1.Items.Count - 1 To 0 Step -1
            If ListView1.SelectedIndices.Contains(i) Then
                ListView1.Items(i).Remove()
            End If
        Next
 
    End Sub
А так добавляю:

VB.NET
1
2
3
4
5
6
7
8
9
10
Private Sub Добавить(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Добавить.Click
'Добавляем в список строку и одновременно заполняем ее первый столбец:
LV.Items.Add(TextBox1.Text)
'Добавляем в строку еще два элемента:
LV.Items(LV.Items.Count - 1).SubItems.Add(TextBox2.Text)
LV.Items(LV.Items.Count - 1).SubItems.Add(TextBox3.Text)
LV.Items(LV.Items.Count - 1).SubItems.Add(TextBox4.Text)
LV.Items(LV.Items.Count - 1).SubItems.Add(TextBox5.Text)
LV.Items(LV.Items.Count - 1).SubItems.Add(TextBox6.Text)
End Sub
Как это правильно записать в файл значения после добавления/удаления?
3
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,593
Записей в блоге: 1
31.01.2016, 20:58
Цитата Сообщение от ~Jack~ Посмотреть сообщение
Так, что дальше делаем после считывания файла в массив?
ну и напоследок, т.к. я думал что мы дойдем без копипаста до финала, все-таки отвечу. А дальше проходимся по массиву циклом, и сплитем для передачи в контрол. и усё...
к сожалению listview не поддерживает такое
VB.NET
1
ListBox1.Items.AddRange(IO.File.ReadAllText(My.Application.Info.DirectoryPath & "\Data.txt", System.Text.Encoding.Default).Split("|"))
а то вообще одной строкой можно было бы
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.02.2016, 10:00
Цитата Сообщение от ~Jack~ Посмотреть сообщение
Как это правильно записать в файл значения после добавления/удаления?
а как вы до этого писали? Откуда такая структура файла появилась? Или вы ее просто заранее придумали?
0
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
01.02.2016, 10:09  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
а как вы до этого писали? Откуда такая структура файла появилась? Или вы ее просто заранее придумали?
Раньше у меня был ListBox и я удалял так

VB.NET
1
2
3
4
5
6
7
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
        IO.File.WriteAllText("file.txt", String.Join(vbCrLf, ListBox1.Items.Cast(Of String).ToArray), System.Text.Encoding.Unicode)
        ListBox1.Items.Clear()
        ListBox1.Items.AddRange(IO.File.ReadAllLines("file.txt", System.Text.Encoding.Unicode))
        Button2.Enabled = False
    End Sub
А добавлял так

VB.NET
1
2
3
4
5
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        My.Computer.FileSystem.WriteAllText("file.txt", vbCrLf + TextBox1.Text + "|" + TextBox2.Text + "|" + TextBox3.Text + "|" + TextBox4.Text + "|" + TextBox5.Text + "|" + TextBox6.Text, True)
        ListBox1.Items.Clear()
        ListBox1.Items.AddRange(IO.File.ReadAllLines("file.txt", System.Text.Encoding.Unicode))
    End Sub
Но понял, что с помощью ListView список значений получается более наглядным и удобным (так как есть шапка с названием столбцов и значения можно вынести в отдельные ячейки).

Подскажите как удаление/добавление элемента сделать для ListView?
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
01.02.2016, 10:20
XIST поступил мудро посоветовав вам предварительно считать файл в массив. Самый простой способ - преобразовать полученный из файла массив строк в список (List<string>) и добавлять/удалять значения в нём. При этом, после изменения коллекции, обновлять ListView содержимым коллекции.
При необходимости сохранения данных в файл, просто переберите всю коллекцию и сохраните построчно в файл.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.02.2016, 11:07
Лучший ответ Сообщение было отмечено ~Jack~ как решение

Решение

~Jack~, на скорую руку подправил ваши труды, добавив сохранение и переделал (грамотно) удаление выбранного пункта из списка

Вот КОД:
Кликните здесь для просмотра всего текста
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
Public Class Form1
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Загрузить(LV, "file.txt")
    End Sub
 
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        УдалитьВыбранный(LV)
        Сохранить(LV, Application.StartupPath & "\file.txt")
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Добавить(LV, "1", "2", "3", "4", "5", "6")
        Сохранить(LV, Application.StartupPath & "\file.txt")
    End Sub
 
    Public Sub Добавить(_LV As ListView, i1 As String, i2 As String, i3 As String, i4 As String, i5 As String, i6 As String)
        'Добавляем в список строку и одновременно заполняем ее первый столбец:
        LV.Items.Add(i1)
        'Добавляем в строку еще два элемента:
        With LV.Items(LV.Items.Count - 1).SubItems
            .Add(i2)
            .Add(i3)
            .Add(i4)
            .Add(i5)
            .Add(i6)
        End With
    End Sub
 
    Public Sub Загрузить(_LV As ListView, fName As String)
        _LV.Items.Clear() 'Очищаем список
 
        'Загружаем список:
        Using Чтение As New System.IO.StreamReader(fName, System.Text.Encoding.Default)
            Dim i As Integer = 0
            Do Until Чтение.EndOfStream
                'Добавляем в список очередную строку
                Dim drop() As String = Split(Чтение.ReadLine, "|")
                _LV.Items.Add(drop(0))
                With _LV.Items(i).SubItems
                    .Add(drop(1))
                    .Add(drop(2))
                    .Add(drop(3))
                    .Add(drop(4))
                    .Add(drop(5))
                End With
                i = i + 1
            Loop
        End Using
    End Sub
 
    Public Sub УдалитьВыбранный(_LV As ListView)
        If _LV.Items.Count <> 0 Then
            If _LV.FocusedItem.Selected Then _LV.FocusedItem.Remove() 'Удалить выделенный
        End If
    End Sub
 
    Public Sub Сохранить(_LV As ListView, fName As String)
        Dim ItemsArray As New ArrayList
        For Each item As ListViewItem In _LV.Items
            ItemsArray.Add(item.Text & "|" &
                           item.SubItems(1).Text & "|" &
                           item.SubItems(2).Text & "|" &
                           item.SubItems(3).Text & "|" &
                           item.SubItems(4).Text & "|" &
                           item.SubItems(5).Text)
        Next
        IO.File.WriteAllLines(fName, ItemsArray.ToArray.Cast(Of String), System.Text.Encoding.Default)
    End Sub
End Class
Миниатюры
Загрузить значения из файла в ListView  
Вложения
Тип файла: zip WindowsApplication1.zip (12.6 Кб, 38 просмотров)
5
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.02.2016, 11:13
Цитата Сообщение от ~Jack~ Посмотреть сообщение
Подскажите как удаление/добавление элемента сделать для ListView?
Все что вам было нужно - реализовано и работает... Добавьте только проверку на существование файла, во избежании ошибок, если он отсутствует, я это не стал добавлять, понимая, что и сами справитесь.
1
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
01.02.2016, 12:04  [ТС]
Yury Komar, спасибо, все отлично работает. Небольшой вопрос еще, как убрать пустую строку (каретку) в конце файла после добавления в него новых значений?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.02.2016, 12:51
~Jack~, замените процедуру добавления на вот это:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Public Sub Добавить(_LV As ListView, i1 As String, i2 As String, i3 As String, i4 As String, i5 As String, i6 As String)
        'Добавляем в список строку и одновременно заполняем ее первый столбец:
        _LV.Items.Add(i1)
        'Добавляем в строку еще два элемента:
        With _LV.Items(_LV.Items.Count - 1).SubItems
            .Add(i2)
            .Add(i3)
            .Add(i4)
            .Add(i5)
            .Add(i6)
        End With
        _LV.Items(_LV.Items.Count - 1).Selected = True
        _LV.Focus()
    End Sub
и LV.MultiSelect поставьте в False
0
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
01.02.2016, 13:03  [ТС]
Цитата Сообщение от Yury Komar Посмотреть сообщение
~Jack~, замените процедуру добавления на вот это:
Все равно в файле остается пустая последняя строка

0
01.02.2016, 13:22

Не по теме:

~Jack~, Немного потраченного Вами времени для изучения SQL освободит в десятки раз больше, чем заниматься таким "ректальным заболеванием". В Вашем случае Вам идеально подойдет SQLite

0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
01.02.2016, 13:52
Цитата Сообщение от GSXL Посмотреть сообщение
В Вашем случае Вам идеально подойдет SQLite
зачем такую мелочь хранить в базе данных, которая будет весить как сам Екзешник?

Добавлено через 57 секунд
~Jack~, ну это ведь сам System.IO ее добавляет вроде бы...

Добавлено через 7 минут
а чем он вас смущает?

Добавлено через 1 минуту
добавляет перевод строки так как мы пишем в файл массив строк...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2016, 13:52
Помогаю со студенческими работами здесь

Загрузить содержимое плейлиста в ListView
Нужно загрузить информацию о всех треках в плейлисте в ListView procedure TForm2.sTreeView1DblClick(Sender: TObject); var...

Загрузить информацию из txt в ListView
Собственно сабж нужно загрузить данные из блоктнота в листвью private void AddContactList_Click(object sender, EventArgs e) { ...

Как загрузить в ListView системные иконки?
здраствуите!! нужна маленькая помощь. Хочу в ListView прибавить к моему списку системные иконки ,ну что бы отображал что это папка или ...

Загрузить в Image выбранную картинку в ListView
Народ, помогите пожалуйта. Не могу заставить Image отображать выбранную в ListView картинку. Image и ListView находяться в...

Загрузить ListView из HashSet (ну или простого List)
По итерации цикла в строковое множество закладывается по две разных строки их всегда четное количество. Как их разделить эти строки по...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru