Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Невозможно редактировать массив после Split / 6 сообщений из 6, страница 1 из 1
26.03.2018, 19:31
    #39620718
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно редактировать массив после Split
Привет!
Буду краток.
Создаю динамический массив при помощи 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
26.03.2018, 20:53
    #39620751
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно редактировать массив после Split
MAGRAV,

для начала: какая связь между condArray и приведенным кодом? Там нет таких переменных.
далее: где и когда пробуете сделать этот самый ReDim или Erase? В какой момент? Можете привести более подробный кусок кода вызова функции?
...
Рейтинг: 0 / 0
27.03.2018, 07:08
    #39620863
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно редактировать массив после Split
The_Prist,
Попытался сделать упрощённую версию своей рабочей книги, но убрав все ништяки и сделав простой синтетический пример проблема исчезла. Приводить ради примера оригинальный документ будет просто издевательством к экспертам. Там столько наворочено, что будет больше вопросов. Суть выявлю - отпишу.
...
Рейтинг: 0 / 0
27.03.2018, 07:33
    #39620868
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно редактировать массив после Split
Могу добавить лишь то, что в моём обработчике присутствовали два GoTo . В сложном примере, убрав GoTo , это помогло но нарушило логику. А в простом примере GoTo не влияет. Буду разбираться дальше.
...
Рейтинг: 0 / 0
27.03.2018, 07:50
    #39620876
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно редактировать массив после Split
Укажите точный тип массива, а не делайте по умолчанию Variant. И временный массив - в общем лишний.
...
Рейтинг: 0 / 0
27.03.2018, 10:16
    #39620948
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно редактировать массив после Split
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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Невозможно редактировать массив после Split / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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