→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Работа со строками в VBA и Office 
Автор Сообщение
Администратор
Аватара пользователя

Регистрация: 03.11.2007
Сообщения: 559
Откуда: Украина
Специальность:

Репутация: 6 [ ? ]
Сообщение Работа со строками в VBA и Office
Работа со строками в VBA и Office

Описание встроенных функций для манипуляций со строками.
Мне задали вопрос о том, как работать со строками в Visual Basic For Application в Microsoft Office, ответив на вопрос я решил, что это хороший вопрос для более детального рассмотрения.

Наиболее частой операцией, с которой приходится сталкиваться - это сравнение строковых выражений. Сравнение зависит от параметров Option Compare.

Option Compare {Binary | Text | Database}

Возможные установки:
Binary - сравнение идет побайтно.
Text - сравнение идет по расположению этих строк в словаре.
Database - работает только в Microsoft Access, работает со строками Access.
Сама операция сравнения не зависит от регистра символов, т.е. программе все равно как написано слово - с прописной или строчной буквой, поэтому эта функция не годится для распознавания ввода в другом регистре.

Если же вам нужно в какой-то части кода использовать другой тип сравнения, вы можете переопределить тип сравнения только для двух строк, так:

StrComp(string1, string2[, compare])

Где Compare, по умолчанию 0. Аргументы: 0-Binary, 1-Text. Если string1=string2, тогда функция возвращает 0, если strind1<string2, тогда 1, а если string1>string2, то функция возвратит -1.

Для сравнения с неким уже заданным образцом можно использовать встроенную функцию like

result = string Like pattern

Значение pattern может быть таким:
* Как и в шаблонах - означает любые символы и числа.
? Один символ (любой)
# Любая одна цифра
[!charset] - любой символ не принадлежащий данному множеству символов
[charset] - любой символ принадлежащий множеству заданных символов

Оператор like уже чувствителен к регистрам символов, поэтому [A-Z] не то же самое, что [a-z].

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

InStr([start, ]string1, string2[, compare])

start - позиция начала поиска, compare - способ сравнения (см. выше).
Данная функция возвращает позицию вхождения второй строки внутри первой. Так же если start задан, но он больше, чем длина второй строки, то функция возвратит ноль. Вполне логично, что можно избежать этого, особенно если ваша программа не рассчитана на такое, определив длину строки с помощью функции Len(string).

If start <= Len(string2) Then
result = InStr([start, ]string1, string2[, compare])
Else
MsgBox "Длина строки меньше, чем начальная позиция."
End If


Но необходимо учесть, что она может возвратить только позицию первого вхождения. Для определения позиции последнего вхождения существует функция InStrRev, с аналогичным синтаксисом. (Учтите, что эта функция не работает в Microsoft Office 97, поэтому может не работать у некоторых ваших клиентов).

InstrRev(stringcheck, stringmatch[, start[, compare]])

Значение start по умолчанию -1, поэтому если его пропустить, то поиск начнется с конца строки.

Также нужно упомянуть и уже практически всем известные функции Mid, Right, Left. Их деятельность очень похожа, если не сказать одинакова.
Left(strind, len) - получает Len символов слева
Right(string, len) - получает Len символов справа
Mid(string, start, len) - получает Len символов начиная с start позиции, если не указать аргумент Len, то функция вернет все символы после позиции stаrt.

Для изменения регистра символов в строке, можно пропустить строку, через функцию LCase или UCase. Первая переведет все символы в нижний регистр, а вторая переведет все символы строки в верхний регистр.

Если нужно удалить из строки пробелы, то можно воспользоваться функцией Trim, LTrim, RTrim (удаляет все пробелы, слева, справа -соответственно).

Если нужно создать строку с повторениями одного и того же символа, то воспользуйтесь функцией String(num, сhar)

Для работы с вхождениями строк существует еще функция замены подстроки.

Replace(expression, find, replace[, start[, count[, compare]]])
expression - исходная строка
find - что собственно искать
replace - на что заменить
count - количество проводимых замен.
compare, start - см. выше
Преобразования строк

Если необходимо собрать все элементы какого-либо массива в строку, то можно использовать встроенную функцию Join.

Join( array [, delimiter])

array - ваш массив, который нужно преобразовать
delimiter - по умолчанию пробел, этот символ будет разделять элементы массива в конечной строке.

Для обратного преобразования существует другая функция - Split.

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

string - ваша строка
delimiter - символ, который нужно принять за разделитель элементов массива. (по умолчанию пробел)
limit - ограничение возвращаемых элементов
compare - см. выше

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


19.01.2008 12:31
Профиль ICQ
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»