Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 2....doc
Скачиваний:
79
Добавлен:
17.12.2018
Размер:
1.62 Mб
Скачать

Разбор строки, допускающей разные разделители ее элементов. Функция WildSplit

Завершим обзор рассмотрения собственных инструментальных средств описанием функции WildSplit. Когда мы описывали стандартную функцию разбора строки на элементы, мы отмечали, что она, к сожалению, не применима в тех достаточно часто встречающихся ситуациях, когда элементы разделяются разными разделителями. Наша функция в какой то мере пытается восполнить существующий пробел. Она разделяет строку на элементы, которые могут в строке разделяться разными символами, представляющими разделители элементов, возможно, окруженные пробелами.

Алгоритм реализации прост. Он использует ранее написанную функцию замены CharSetReplace, заменяя все разделители одним. После этого становится возможным применить стандартную функцию разбора. На заключительном этапе у элементов убираются пробелы слева и справа. Следует отметить и недостаток этой функции, - преобразование необратимо и последующее применение Join не позволяет восстановить исходную строку в первозданном виде. Приведем текст этой функции:

Public Function WildSplit(expr As String, Optional ByVal delimiter As String = " ", _

Optional ByVal limit As Long = -1, Optional ByVal compare As

VbCompareMethod = vbBinaryCompare) As Variant

'Также, как и стандартная функция Split, эта функция расщепляет

строку - источник expr

'на элементы, используя разделители, заданные аргументом delimiter

'Отличие состоит в том, что при выделении элементов предполагается,

что разделителем

'может быть любой из символов множества delimeter, возможно, окруженный

пробелами

Dim Source As String, ResAr() As String

Dim find As String, Rep As String

Dim i As Long

Source = expr

find = VBA.Mid$(delimiter, 2)

Rep = VBA.Left$(delimiter, 1)

'Заменяем в строке все разделители на один из них

Source = CharSetReplace(Source, find, Rep)

'Теперь используем стандартную функцию Split

ResAr = Split(Source, Rep, limit, compare)

'Удаляем пробелы

For i = LBound(ResAr) To UBound(ResAr)

ResAr(i) = VBA.Trim$(ResAr(i))

Next i

WildSplit = ResAr

End Function

Пример 8.6. (html, txt)

Приведем также тестовую процедуру, в которой выполняется разбор строки функцией WildSplit:

Public Sub testWildSplit()

Dim Txt As String, Res As String

Dim Items() As String

Txt = "a * b - (c+d)/v"

Items = WildSplit(Txt, "+-*/")

Res = Join(Items)

Debug.Print Res

End Sub

Вот результаты ее работы:

a b (c d) v

На этом мы закончим наш затянувшийся разговор о работе со строковыми данными.

Работа с датами и временем

Для того, чтобы обеспечить программисту возможность корректно работать с датами и временем, VBA предоставляет специальный тип данных Date, хранящий дату и время. Над данными этого типа можно выполнять некоторые операции, но, конечно же, при работе с ними чаще всего используются специальные встроенные функции. Попытаемся коротко рассмотреть основные возможности работы с датами. Прежде всего, заметим, что возможный диапазон дат охватывает даты от 1.1.100 года до 1-го января 9999 года. Если говорить о внутреннем представлении дат, занимающих 4 байта памяти, то целая часть хранит число дней от некоторой начальной даты, дробная часть хранит время от полуночи. Начальной датой является 30-е декабря 1899 года. Благодаря такому внутреннему представлению сложение и вычитание целого числа воспринимается как прибавление или вычитание дней.