powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с динамическим массивом
5 сообщений из 5, страница 1 из 1
Проблема с динамическим массивом
    #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
Проблема с динамическим массивом
    #37477979
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p0oh!,

ReDim изменяет размерность последнего измерения массива, а ты пытаешься изменить предпоследнее измерение :)
...
Рейтинг: 0 / 0
Проблема с динамическим массивом
    #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
Проблема с динамическим массивом
    #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
Проблема с динамическим массивом
    #37488861
p0oh!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О блин точно. Спасибо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с динамическим массивом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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