powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как грамотно хранить в проге небольшой массив данных
11 сообщений из 11, страница 1 из 1
Как грамотно хранить в проге небольшой массив данных
    #36987910
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну т.е. сделали скан ветки реестра, нашли несколько ключей

Key1
Key2
...
KeyN

По каждому ключу вычислили пару-тройку дополнительных полей

FieldA(key1)
FieldA(key2)
...
FieldA(keyN)

FieldB(key1)
FieldB(key2)
...
FieldB(keyN)

В итоге должны хранить что-то типа
Key1 FieldA(key1) FieldB(key1)
Key2 FieldA(key2) FieldB(key2)
...
KeyN FieldA(keyN) FieldB(keyN)

Потом с этим "поработать", ну в частности иметь возможность "безобидно" удалить какую-то строчку из середины.

Один из напрашивающихся способов - использовать скрытый List с несколькими колонками.
Но отображать ничего не надо. Насколько List оправдан и не есть дурной тон?

Понятно, что это несколько линейных массивов, но
1) размерность заранее неизвестна, всякие ReDim применять...
2) при удалении элемента умучаешься переиндексировать...

Т.е. List как бы напрашивается...
Какие соображения?
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36987917
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а массив типов не подходит?
или коллекция типов
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36987955
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael Rну а массив типов не подходит?
или коллекция типов
А можно пример (простенький!)? Если я с этим и связывался, то давно все позабыл.
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988023
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private Type  T1
  Field1 as string
  Field2 as string
  Field3 as string
end Type


Dim Arr1( 5 ) as T1

Arr( 1 ).Field1="a"
Arr( 1 ).Field2="a"
Arr( 1 ).Field3="a"


как маленький пример
в принципе можно делать и несколько иерархий

с коллекцией в коллекции в VB есть свой Wizard для создания подобных вещей
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988084
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael R,
Dim Arr1(5) as T1
это от 1-го до 5? Кажется от 0 до 5

ну хорошо, пусть для ясности
Dim Arr1(1 To 5) as T1

Но у меня N заранее неизвестно. Если элементов 2, то зачем мне 5. А если окажется 7?

Т.е наверно
Dim Arr1(1 To 1) as T1
и делать ReDim при добавление n-го элемента?
Как этот Redim правильно записать, не помню?

А если удаляю из середины? Сдвигать все что дальше и re-dimmить на единицу меньше.
Хотя... здесь как раз можно просто стирать значения и не париться, это ж не БД...а разовая короткая процедура.
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988111
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда или коллекция или Recordset
при удалении перемещать элементы не нужно
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988180
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael R,

да бог с ними с коллекциями.
там и удалять наверно не понадобиться
с ReDim(Arr) кусок кода какой-нибудь никто не подкинет?

А List кстати бестолковый способ, т.к.
в отличии от ListView там subitems(columns) добавляется типа так:
Код: plaintext
FormMain.ListKeys.AddItem strValue & Chr( 9 ) & "Test"
А считать в лоб этот "Test" из 2-й колонки вообще методов нету.

Ну а ListView сюда, это уже очень слишком...
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988206
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77в отличии от ListView там subitems(columns) добавляется типа...
Ну это я вообще чушь спорол, там columns это способ отображения и с subitems вообще ничего общего не имеет. Там только Items голые есть.
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988352
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы не использовать отсоединенный ADO Recordset, который позволяет добавлять и удалять записи без проблем.
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988357
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77и делать ReDim при добавление n-го элемента?
Как этот Redim правильно записать, не помню?

Redim Preserve MyArr(n)


Дмитрий77А если удаляю из середины? Сдвигать все что дальше и re-dimmить на единицу меньше.
Хотя... здесь как раз можно просто стирать значения и не париться, это ж не БД...а разовая короткая процедура.

Вообще, коллекция - крайне удобная вещь.
Я практически отказался от массивов.
...
Рейтинг: 0 / 0
Как грамотно хранить в проге небольшой массив данных
    #36988475
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Preserve это я долго допирал, ваш ответ потом прочел.
Ну что-то типа такого наклевывается:

Код: plaintext
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.
Public Type Uninstall
  Key As String
  UninstallString As String
  HasUninstall As Boolean
  RealVersion As String
End Type

Public UN() As Uninstall
Public HasUN As Boolean

Public Sub GetUninstallKeys()
...
   HasUN = False 'нет точек входа
    i =  0 
   strSearch = "TheProga"
...
                ' Populate the list with keys that match
                ' the search criteria
                If blnMatch Then
                    i = i +  1 
                    HasUN = True 'есть хотя бы одна точка входа
                    ReDim Preserve UN( 1  To i)
                    UN(i).Key = strValue
                End If
            End If
        
        ' Keep looking for more keys
        Loop While lngResult = ERROR_SUCCESS
...

Sub Main()
    GetUninstallKeys
'test
    Dim i As Integer
    Dim str As String
    If HasUN Then
        str = LBound(UN) & " To " & UBound(UN)
        For i = LBound(UN) To UBound(UN)
            str = str & vbCrLf & UN(i).Key
        Next i
    Else
        str = "TheProga not found!"
    End If
    MsgBox str
End Sub
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как грамотно хранить в проге небольшой массив данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]