Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа со строками.docx
Скачиваний:
25
Добавлен:
26.09.2019
Размер:
66.22 Кб
Скачать

Удаление подстроки

Удаление вхождений подстроки в строку также является одной из основных операций над строками. Хотя специальной встроенной функции DelStr не появилось, но написать ее реализацию, имея Replace, совсем просто. Удалить подстроку эквивалентно замене ее пустой подстрокой. Вот текст, написанной нами функции DelStr:

Public Function DelStr(ByVal Expr As String, ByVal find As String, _

Optional ByVal start As Long = 1, Optional ByVal count As Long = -1, _

Optional ByVal compare As VbCompareMethod = vbBinaryCompare)

'Вызов функции MyReplace с пустой строкой для замены

DelStr = MyReplace(Expr, find, "", start, count, compare)

End Function

Приведем результаты ее вызовов в окне отладки:

? DelStr("T* + U** - V*","*")

T + U - V

? DelStr("T* + U** - V*","*",5)

T* + U - V

? DelStr("T* + U** - V*","*",5,1)

T* + U* - V*

Заметьте, при определении DelStr мы предпочли пользоваться собственной модификацией MyReplace, поскольку, как нам кажется, она в большей степени отвечает сути дела.

Разбор строки. Функции Split, Join и Filter

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

Преобразование строки в массив. Функция Split

Предполагается, что исходная строка состоит из элементов (подстрок), разделенных специальными символами - разделителями. Функция Split возвращает одномерный массив из элементов строки. Синтаксис:

Split(expression[, delimiter[, limit[, compare]]])

Параметры:

  • expression - строковое выражение, результат которого задает строку - источник, состоящую из элементов и разделителей.

  • delimeter - строка, задающая последовательность символов, используемых в качестве разделителя. Если этот параметр опущен, то по умолчанию предполагается, что в роли разделителя выступает пробел.

  • limit - необязательный параметр, позволяющий ограничить число возвращаемых элементов. По умолчанию его значение равно -1, означающее выделение всех элементов.

  • compare - необязательный параметр, имеющий стандартный смысл во всех операциях над строками. По умолчанию предполагается двоичное побитовое сравнение.

Приведем пример, в котором сложноподчиненное предложение разделяется на простые предложения:

Public Sub SplitString()

'В этой процедуре сложное предложение разделяется на простые

'Объявляем динамический массив

Dim Simple() As String, i As Byte

'Размерность массива Simple устанавливается автоматически

'в соответствии с размерностью массива, возвращаемого функцией Split

Simple = Split("А это пшеница, которая в темном чулане хранится в доме, " _

& "который построил Джек", ", ")

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

Debug.Print Simple(i)

Next i

End Sub

В результате работы этой процедуры создается массив из трех элементов:

А это пшеница

которая в темном чулане хранится в доме

который построил Джек

Обратите внимание, для использования результатов работы функции Split создается динамический массив строк. О размерности его нет нужды заботиться, поскольку в момент присвоения ему результата выполнения Split, он заполняется элементами и у него появляется нижняя и верхняя граница. Далее с этим массивом можно работать обычным образом.

У функции Split, на наш взгляд, есть один недостаток. Хотя в роли разделителя может выступать последовательность символов, в нашем примере это пара символов "запятая, пробел", но нельзя использовать разные разделители элементов. В задачах подобного рода типичной является ситуация, когда элементы отделяются разными разделителями, возможно, окруженными пробелами. Позже мы покажем, как можно справиться с этой задачей.