Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как грамотно хранить в проге небольшой массив данных / 11 сообщений из 11, страница 1 из 1
01.12.2010, 10:09
    #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
01.12.2010, 10:11
    #36987917
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно хранить в проге небольшой массив данных
ну а массив типов не подходит?
или коллекция типов
...
Рейтинг: 0 / 0
01.12.2010, 10:25
    #36987955
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно хранить в проге небольшой массив данных
michael Rну а массив типов не подходит?
или коллекция типов
А можно пример (простенький!)? Если я с этим и связывался, то давно все позабыл.
...
Рейтинг: 0 / 0
01.12.2010, 10:50
    #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
01.12.2010, 11:06
    #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
01.12.2010, 11:13
    #36988111
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно хранить в проге небольшой массив данных
тогда или коллекция или Recordset
при удалении перемещать элементы не нужно
...
Рейтинг: 0 / 0
01.12.2010, 11:38
    #36988180
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как грамотно хранить в проге небольшой массив данных
michael R,

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

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

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

Redim Preserve MyArr(n)


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

Вообще, коллекция - крайне удобная вещь.
Я практически отказался от массивов.
...
Рейтинг: 0 / 0
01.12.2010, 12:54
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как грамотно хранить в проге небольшой массив данных / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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