Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

12 Декабрь 2017, 05:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Работа с массивом  (Прочитано 391 раз)
0 Пользователей и 1 Гость смотрят эту тему.
alexmn31
Новичок
*
Offline Offline

Сообщений: 5


« Стартовое сообщение: 27 Сентябрь 2017, 09:51 »

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

Пол: Мужской
Сообщений: 2 312


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 27 Сентябрь 2017, 10:05 »

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

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

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

End Sub
Записан

alexmn31
Новичок
*
Offline Offline

Сообщений: 5


« Ответ #2: 27 Сентябрь 2017, 10:08 »

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

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 709


« Ответ #3: 27 Сентябрь 2017, 10:13 »

(Придирка) а язык называется Calc?
Записан

С уважением,
Михаил Каганский
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #4: 27 Сентябрь 2017, 10:16 »

Функция IsNull не работает
Как выглядит объявление массива и как используется функция IsNull? Хотелось бы увидеть код
И еще вопрос как обнулить сразу весь массив, есть тут такая функция?
В этом случае под "обнулить" понимается "прописать нолями" или "присвоить каждому элементу Null"?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 312


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 27 Сентябрь 2017, 10:28 »

Под нулевым я имел ввиду  Null
Ведь значение может быть равно 0  и это нормально
Нулей развелось на все случаи: "значение может быть равно 0" — это числовой ноль, а "я имел ввиду  Null" — это неприсвоенный объект. Функция IsNull проверяет является ли переменная неприсвоенным объектом.
« Последнее редактирование: 27 Сентябрь 2017, 10:50 от rami » Записан

alexmn31
Новичок
*
Offline Offline

Сообщений: 5


« Ответ #6: 27 Сентябрь 2017, 10:49 »

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

А Проверка

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

End if
Записан
alexmn31
Новичок
*
Offline Offline

Сообщений: 5


« Ответ #7: 27 Сентябрь 2017, 10:50 »

В этом случае под "обнулить" понимается "прописать нолями" или "присвоить каждому элементу Null"?

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

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 709


« Ответ #8: 27 Сентябрь 2017, 11:06 »

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

Пользуйтесь отладкой и проверяйте содержимое переменных с помощью точек останова и окна Watch.
« Последнее редактирование: 27 Сентябрь 2017, 11:09 от mikekaganski » Записан

С уважением,
Михаил Каганский
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #9: 27 Сентябрь 2017, 11:20 »

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
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 312


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #10: 27 Сентябрь 2017, 11:36 »

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

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

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

Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!