Работа с массивом

Автор alexmn31, 27 сентября 2017, 09:51

0 Пользователи и 1 гость просматривают эту тему.

alexmn31

Всем привет
Извиняюсь за глупые вопросы, я только начал изучать этот язык
Подскажите как libreoffice сделать проверку на нулевой элемент массива
Функция IsNull не работает
И еще вопрос как обнулить сразу весь массив, есть тут такая функция?

rami

Вот пример:
Sub Main
Dim a(9)  'определяет массив с десятью элементами
a(1)=5    'второй элемент равен пяти
a(3)=7

If a(2)=0 Then Print "третий элемент массива равен нулю"

ReDim a(9)   'переопределяет массив

End Sub

alexmn31

Под нулевым я имел ввиду  Null
Ведь значение может быть равно 0  и это нормально

mikekaganski

(Придирка) а язык называется Calc?
С уважением,
Михаил Каганский

JohnSUN

Цитата: alexmn31 от 27 сентября 2017, 09:51
Функция IsNull не работает
Как выглядит объявление массива и как используется функция IsNull? Хотелось бы увидеть код
Цитата: alexmn31 от 27 сентября 2017, 09:51И еще вопрос как обнулить сразу весь массив, есть тут такая функция?
В этом случае под "обнулить" понимается "прописать нолями" или "присвоить каждому элементу Null"?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

#5
Цитата: alexmn31 от 27 сентября 2017, 10:08
Под нулевым я имел ввиду  Null
Ведь значение может быть равно 0  и это нормально
Нулей развелось на все случаи: "значение может быть равно 0" — это числовой ноль, а "я имел ввиду  Null" — это неприсвоенный объект. Функция IsNull проверяет является ли переменная неприсвоенным объектом.

alexmn31

Цитата: JohnSUN от 27 сентября 2017, 08:16Как выглядит объявление массива и как используется функция IsNull? Хотелось бы увидеть код
Примерно так:
Dim armain(10) As Integer

А Проверка

If IsNull(armain(5)) then
......

End if

alexmn31

Цитата: JohnSUN от 27 сентября 2017, 08:16В этом случае под "обнулить" понимается "прописать нолями" или "присвоить каждому элементу Null"?

Понимается присвоить каждому элементу Null

mikekaganski

#8
Вы объявляете массив с заданным типом (Integer). Элементы любого массива всегда (с момента создания) имеют значения, допустимые для типа элемента. По умолчанию (когда тип не задан) предполагается Variant, который может иметь значения Empty (по умолчанию - обратите внимание - не Null!) и любые другие. А Integer - это только числа, и инициализируется нулями (0, не  Null).

Пользуйтесь отладкой и проверяйте содержимое переменных с помощью точек останова и окна Watch.
С уважением,
Михаил Каганский

JohnSUN

Цитата: alexmn31 от 27 сентября 2017, 10:49
Dim armain(10) As Integer
Про Null в переменную типа Integer mikekaganski уже написал. То есть для этого массива IsNull всегда будет возвращать False.
Быстро обнулить такой массив (присвоить 0, не Null!) можно с помощью оператора ReDim. Просто
ReDim armain(10)
и все элементы опять нули, как в самом начале процедуры.

С учетом замечания "Variant...может иметь значения Empty (по умолчанию - обратите внимание - не Null!)" проверку значения элементов такого массива рекомендуется проводить чуть более сложным оператором
If IsEmpty(vArray(i)) Or IsNull(vArray(i)) Then
И, конечно же, с помощью оператора ReDim или функции DimArray можно быстро очистить и массив Variant

А вот присвоить Null (или любое другое значение) всем элементам массива можно только в цикле
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 27 сентября 2017, 09:20А вот присвоить Null (или любое другое значение) всем элементам массива можно только в цикле
Можно изначально определить как массив объектов:
Dim armain(10) As Object

или переопределить:
ReDim armain(10) As Object

тогда каждый элемент будет NULL