===[ Программизм / VB ]=== #post-id: 6348-16-45 #original-date: 12.12.2017 Tue #original-time: 4:45 PM #original-day: 6348 #original-host: Win7 Prof SP1 (Build 7601) Век живи, век учись. Есть некая функция, которая принимает массив параметров (энное количество необязательных). Делается это так: > Private Sub Byaka(ParamArray Items() As Variant) Вызывается это так: > Byaka 1, 2, 3 Или так: > Byaka В самой функции эти параметры – массив вариантов, который обрабатывается как обычный массив. А если не будет передано никаких параметров, то будет пустой массив – Items(0 To -1). И вот тут возник вопрос, как ручками создать такой пустой массив. Ну тоесть у меня задача сконвертировать массив вариантов в массив стрингов. Когда прилетает пустой массив, этот код: > ReDim Arr(0 To -1) ...выдаёт ошибку «Subscript out of range». Нельзя так делать, верхняя граница должна быть больше или равна нижней, но не меньше. Если же мы просто объявляем массив: > Dim Arr() As String ...и оставляем как есть, то это будет не пустой массив, а неинициализированный. Тоесть у него вообще не будет границ, а UBound() и LBound() выдадут ошибку. Что делать? Покопавшись в памяти, я вспомнила, что для массивов байтов использовала костыль такого вида: > Dim A() As Byte > A = "" Массив байтов может содержать строку, и простое присвоение заполняет массив данными в UTF-16. Ну а поскольку строка пуста, то и массив получается такой же. Но тут у нас массив строк, так что этот код бесполезен. А что возвращает массив строк? Split()! Она ищет разделители в строке и возвращает массив элементов, которые находятся между этими элементами. Если в строке на найдётся ни одного разделителя, то вернётся массив из одного элемента – исходной строки. А если строка пустая? Оказалось, что в этом случае возвращается пустой массив. Поэтому делать нужно так: > Dim A() As String > A = Split("", "Huh") ---------- ~ ---------- Пока писала этот обзор, нашла кучу ошибок в своём руби модуле vb.rb (https://github.com/Linda-chan/vb-string-functions), в функции split2() =_= Будем исправлять =_=