powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Невозможно редактировать массив после Split
6 сообщений из 6, страница 1 из 1
Невозможно редактировать массив после Split
    #39620718
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
Буду краток.
Создаю динамический массив при помощи Split:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
'ПОЛУЧАЕМ ТОЛЬКО НЕ ПУСТЫЕ ЗНАЧЕНИЯ МАССИВА ИЗ СТРОКИ
Sub SplitNoEmptyDelimiter(ByVal stroka As String, ByVal Delimiter As String, ByRef myArray()) 'As String
    Dim iArray() As String
    Dim N As Integer
    ReDim myArray(0)
    
    stroka = Replace(stroka, Chr(9), " ")
    iArray() = Split(stroka, Delimiter)
    For N = LBound(iArray) To UBound(iArray)
        If iArray(N) <> "" Then
            If myArray(UBound(myArray)) <> "" Then ReDim Preserve myArray(UBound(myArray) + 1)
            myArray(UBound(myArray)) = iArray(N)
        End If
    Next
End Sub



Получаю массив в процессе работы пользовательской функции вызываемой с листа.
В первый раз массив создаётся.
Во последующий раз любые попытки чтолибо сделать с этим массивом приводят к молчаливому вылету.
Код: vbnet
1.
2.
3.
4.
5.
ReDim condArray(0)
'или
Erase condArray
'или
ReDim condArray(LBound(condArray), UBound(condArray))



Может подскажете с чем это может быть связано?
...
Рейтинг: 0 / 0
Невозможно редактировать массив после Split
    #39620751
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAGRAV,

для начала: какая связь между condArray и приведенным кодом? Там нет таких переменных.
далее: где и когда пробуете сделать этот самый ReDim или Erase? В какой момент? Можете привести более подробный кусок кода вызова функции?
...
Рейтинг: 0 / 0
Невозможно редактировать массив после Split
    #39620863
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,
Попытался сделать упрощённую версию своей рабочей книги, но убрав все ништяки и сделав простой синтетический пример проблема исчезла. Приводить ради примера оригинальный документ будет просто издевательством к экспертам. Там столько наворочено, что будет больше вопросов. Суть выявлю - отпишу.
...
Рейтинг: 0 / 0
Невозможно редактировать массив после Split
    #39620868
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могу добавить лишь то, что в моём обработчике присутствовали два GoTo . В сложном примере, убрав GoTo , это помогло но нарушило логику. А в простом примере GoTo не влияет. Буду разбираться дальше.
...
Рейтинг: 0 / 0
Невозможно редактировать массив после Split
    #39620876
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Укажите точный тип массива, а не делайте по умолчанию Variant. И временный массив - в общем лишний.
...
Рейтинг: 0 / 0
Невозможно редактировать массив после Split
    #39620948
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAGRAV,
1. Вам обязательно возвращать массив myArray() типа Variant? Можно было бы возвращать iArray() типа String, работа с таким типом требует меньше ресурсов.
2. ReDim Preserve в цикле - очень затратный метод. Лучше сделать его один раз после цикла:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub SplitNoEmptyDelimiter(ByRef stroka As String, ByRef Delimiter As String, ByRef myArray()) 'As String
    Dim iArray() As String
    Dim N As Long, x
    
    iArray() = Split(Replace(stroka, vbTab, " "), Delimiter)
    ReDim myArray(0 To UBound(iArray))
    For Each x In iArray
        If Len(x) Then myArray(N) = x: N = N + 1
    Next
    ReDim Preserve myArray(0 To N - 1)
End Sub

Sub test()
Dim condArray()
  SplitNoEmptyDelimiter "Мама, мы" & Chr(9) & "ла, , , раму", ", ", condArray
  Debug.Print "-" & Join(condArray, "-") & "-"
End Sub
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Невозможно редактировать массив после Split
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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