Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с динамическим массивом / 5 сообщений из 5, страница 1 из 1
11.10.2011, 22:19
    #37477973
p0oh!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с динамическим массивом
Помогите понять почему не работает. Ошибка out of range - при том нужно выделить всего 182 объекта в момент вызова ошибки.
Предполагаю, что корень проблемы в параметре 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.
Public Sub CompareCluster()

Dim FullClusterMassive() As String
Dim FullLinkMassive() As String
Dim inx As Integer
Dim inz As Integer
inx =  0 
inz =  0 

    If Form1.FileList1.ListCount >  0  Then             'Если в списке файлов есть хотябы один файл
        For i =  0  To Form1.FileList1.ListCount -  1     'то пробежимся по всем
            Form1.FileList1.ListIndex = i             'Устанавливая курсор на каждый чтобы появилось его отпарсенное содержимое
            
            
        If Form1.List1.ListCount >  0  Then             'И если есть хотя бы одна запись то
            
            inx = inz
            inz = inx + Form1.List1.ListCount -  1        'Вычислим масимальную длинну массива для того чтобы поместить в него новые данные
            ReDim Preserve FullClusterMassive(inz,  4 )   'Выделяем для массива нужную размерность
            
            For j =  0  To Form1.List1.ListCount -  1       'заполняем массив
                Form1.List1.ListIndex = j
                FullClusterMassive(inx + j,  0 ) = Form1.List1.List(j,  0 )
                FullClusterMassive(inx + j,  1 ) = Form1.List1.List(j,  1 )
                FullClusterMassive(inx + j,  2 ) = Form1.List1.List(j,  2 )
                    
            Next j
        End If
        Next i
    End If


Form1.List2.ColumnCount = UBound(FullClusterMassive) +  2 
Form1.List2.List = FullClusterMassive

End Sub




Пробовал выделить сразу стотыщьпицот объектов для массива - работает - но как то не волшебно это в ЛистБоксе выглядит..
Пробовал Ужать размер массива перед выводом, сделав:
Код: plaintext
ReDim Preserve FullClusterMassive(inz,  4 )
так же ругает - говорит SubScript out of range.
...
Рейтинг: 0 / 0
11.10.2011, 22:37
    #37477979
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с динамическим массивом
p0oh!,

ReDim изменяет размерность последнего измерения массива, а ты пытаешься изменить предпоследнее измерение :)
...
Рейтинг: 0 / 0
11.10.2011, 22:51
    #37477991
p0oh!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с динамическим массивом
Игорь Горбонос,
С чего бы это? Если убрать Preserve - он выделит столько сколько нужно. Но я теряю то, что уже есть в этом массиве... а мне это не надо... Мне порядка 40 файлов в итоге консолидировать ((((


Пока решил проблему таким вот, варварским способом (((( Хотелось бы что то цивилизованное сообразить...

Код: 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 Sub CompareCluster()

Dim FullClusterMassive() As String
'Dim FullLinkMassive() As String
Dim inx As Integer
Dim inz As Integer
inx =  0 
inz =  0 


    If Form1.FileList1.ListCount >  0  Then             'Если в списке файлов есть хотябы один файл
        For i =  0  To Form1.FileList1.ListCount -  1     'то пробежимся по всем
            Form1.FileList1.ListIndex = i
            inz = inz + Form1.List1.ListCount -  1 
        Next i
    End If
    ReDim Preserve FullClusterMassive(inz,  4 )             'Выделяем для массива нужную размерность
    

    If Form1.FileList1.ListCount >  0  Then             'Если в списке файлов есть хотябы один файл
        For i =  0  To Form1.FileList1.ListCount -  1     'то пробежимся по всем
            Form1.FileList1.ListIndex = i             'Устанавливая курсор на каждый чтобы появилось его отпарсенное содержимое
            
            
        If Form1.List1.ListCount >  0  Then             'И если есть хотя бы одна запись то

            
            For j =  0  To Form1.List1.ListCount -  1       'заполняем массив
                Form1.List1.ListIndex = j
                FullClusterMassive(inx + j,  0 ) = Form1.List1.List(j,  0 )
                FullClusterMassive(inx + j,  1 ) = Form1.List1.List(j,  1 )
                FullClusterMassive(inx + j,  2 ) = Form1.List1.List(j,  2 )
                    
            Next j
            
            inx = inx + Form1.List1.ListCount -  1 
        End If
        Next i
    End If


Form1.List2.ColumnCount = UBound(FullClusterMassive) +  2 
Form1.List2.List = FullClusterMassive

End Sub
...
Рейтинг: 0 / 0
12.10.2011, 16:09
    #37479032
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с динамическим массивом
p0oh!С чего бы это? Если убрать Preserve - он выделит столько сколько нужно...
Не забывайте читать хелп:
"ReDim Statement"...If you use the Preserve keyword, you can resize only the last array dimension and you can't change the number of dimensions at all. For example, if your array has only one dimension, you can resize that dimension because it is the last and only dimension. However, if your array has two or more dimensions, you can change the size of only the last dimension and still preserve the contents of the array...
Перевод требуется?

В вашем случае надо использовать
Код: plaintext
ReDim Preserve FullClusterMassive( 4 , inz)
(естественно, поменяв порядок индексов при заполнении), а заполнение листбокса в этом случае можно делать не через .List, а через .Columns
Код: plaintext
Form1.List2.Columns = FullClusterMassive
...
Рейтинг: 0 / 0
19.10.2011, 13:56
    #37488861
p0oh!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с динамическим массивом
О блин точно. Спасибо.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с динамическим массивом / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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