Как очистить многомерный массив? - PullRequest
0 голосов
/ 26 марта 2019

Я написал функцию импорта CSV.CSV-файл разделяется на столбцы и строки, а затем сохраняется в многомерном массиве.

В какой-то момент мне нужно установить для многомерного массива значение Empty, потому что следующее условие If проверяет IsEmpty().

Я уже пробовал это:

aMultidimArray = Empty

aMultidimArray = Nothing

ReDim aMultidimArray(0,0)

Erase aMultidimArray
a = Split(sData, sDelimiter)
For Each x In a

    '*** Resize and write into multidimensional array
    ReDim Preserve aMultidimArray(iFirstDim, iSecondDim)
    aMultidimArray(i - 1,iSecondDim) = x
    If (i = iFirstDim + 1) Then
        i = 0
    End If
    i = i + 1
Next
'***Empty array here
???
'***
GetDataFromCSV = aMultidimArray
'**** other script
If IsEmpty(GetDataFromCSV) Then
    Do stuff
End If

IsEmpty(GetDataFromCSV) должен возвращать true, но я не могу с этим справиться.Это не про очистку массива.Речь идет о том, чтобы снова его инициализировать.Если это даже возможно.

В качестве обходного пути (или, может быть, просто лучшего решения) я просто позвонил Exit function.В результате возвращаемое значение равно Empty, а условие IsEmpty вернет True.

1 Ответ

1 голос
/ 26 марта 2019

В случае сомнений прочитайте документацию :

IsEmpty возвращает True, если переменная неинициализирована или явно установлена ​​на Empty; в противном случае возвращается False. False всегда возвращается, если выражение содержит более одной переменной.

Поскольку ваша переменная абсолютно инициализирована, даже если вы удалите все значения из массива, почему вы ожидаете, что IsEmpty будет возвращать что-либо, кроме False?

В зависимости от того, чего вы на самом деле хотите достичь с помощью своего кода, вы можете проверить размеры вашего массива:

If UBound(GetDataFromCSV, 1) = -1 And UBound(GetDataFromCSV, 2) = -1 Then
    'array is a 0x0 array
End If

Если ваш массив не имеет нулевого размера, вам, вероятно, нужно перебрать все поля и проверить, не заполнены ли они.

Если вы считаете, что вам нужно сбросить переменную, которая была определена как массив, на Empty Я подозреваю, что вы где-то допустили ошибку проектирования, поэтому я настоятельно рекомендую вернуться и исправить проект. Однако, если вам по какой-то причине вам необходимо сбросить переменную массива на Empty, вы можете сделать это следующим образом:

ReDim a(2, 5)  'define variable as array
...
Dim a          're-define variable as regular variable; does not clear the value
a = Empty      'clear variable
...