Поиск по сайту:


«VBA Символьные данные. Операции и функции для работы с символьными данными»

Файл: 4 КБ
Поделиться:

8.1 Символьные данные
8.2 Операции и функции для работы с символьными данными



8.1 Символьные данные

Напомним, что по умолчанию данные строкового типа имеют переменную длину и могут удлиняться (до длины в 2^31 символов) или укорачиваться. Однако такие строки занимают на 10 байт памяти больше, поэтому можно объявить строки фиксированной длины, явно указав количество символов.
Dim s as String*20
Если количество символов будет меньше объявленного, то свободные места заполняются пробелами, при попытке занесения большего количества символов лишние отбрасываются.

8.2 Операции и функции для работы с символьными данными

Единственная операция, применяемая при работе со строками - конкатенация. Зато встроенных функций для работы достаточно много:
Действие Ключевые слова
Сравнение двух строк. StrComp
Преобразование строк. StrConv
Изменение регистра. Lcase, UCase
Создание строк, содержащих повторяющиеся символы. Space, String
Определение длины строки. Len
Форматирование строки. Format
Выравнивание строки. Lset, RSet
Обработка строк. InStr, Left, LTrim, Mid, Right, RTrim, Trim
Выбор типа сравнения строк. Option Compare
Работа с кодами ASCII и ANSI. Asc, Chr
Сравнение двух строк. Функция StrComp возвращает значение типа Variant (Integer), представляющее результат сравнения строк.
StrComp(string1, string2[, compare])
Синтаксис функции StrComp содержит следующие аргументы:
string1 - Обязательный. Любое допустимое строковое выражение.
string2 - Обязательный. Любое допустимое строковое выражение.
compare - Необязательный. Указывает способ сравнения строк. Аргумент compare может быть опущен или иметь значение 0, 1 или 2. Чтобы выполнить двоичное сравнение, следует указать 0 (это значение используется по умолчанию). Чтобы выполнить посимвольное сравнение без учета регистра, следует указать 1. Если аргумент compare опущен, способ сравнения строк определяется значением параметра инструкции Option Compare.
Возвращаемые значения
string1 меньше чем string2 -1
string1 равняется string2 0
string1 больше чем string2 1
Пример:
Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd"	' Определяет переменные.
MyComp = StrComp(MyStr1, MyStr2, 1)	' Возвращает 0.
MyComp = StrComp(MyStr1, MyStr2, 0)	' Возвращает -1.
MyComp = StrComp(MyStr2, MyStr1)	' Возвращает 1.
Выбор типа сравнения строк. Применяется на уровне модуля для задания используемого по умолчанию способа сравнения строковых данных.
Option Compare {Binary | Text}
Инструкция Option Compare при ее использовании должна находиться в модуле перед любой процедурой и указывает способ сравнения строк (Binary или Text) для модуля. Если модуль не содержит инструкцию Option Compare, по умолчанию используется способ сравнения Binary
Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки:
A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш
Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок:
(A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш)
Преобразование строк. Функция StrConv имеет следующи синтаксис:
StrConv(string, conversion)
Здесь string - строковое выражение, которое следует преобразовать, conversion - значение типа Integer, Сумма значений, указывающих тип преобразования, которое следует выполнить.
vbUpperCase 1 Преобразование строки к верхнему регистру.
vbLowerCase 2 Преобразование строки к нижнему регистру.
vbProperCase 3 Преобразование первой буквы каждого слова в строке в прописную.
Вместо одной этой функции можно применять функции Lcase, Ucase.
Lcase - возвращает значение типа String, представляющее строку, преобразованную к нижнему регистру.
LCase(строка)
Обязательный аргумент строка представляет любое допустимое строковое выражение. Если строка имеет значение Null, возвращается значение Null.
К нижнему регистру преобразуются только прописные буквы; строчные буквы и прочие символы остаются неизмененными.
Ucase - возвращает значение типа Variant (String), содержащее строку, преобразованную к верхнему регистру.
UCase(строка)
Обязательный аргумент строка представляет любое допустимое строковое выражение. Если строка имеет значение Null, возвращается значение Null.
К верхнему регистру преобразуются только строчные буквы; прописные буквы и прочие символы остаются неизменными.
Создание строк, содержащих повторяющиеся символы. Для создания таких строк применяют функции Space и String. Функция Space(число) формирует строку, а обязательный аргумент число указывает нужное число пробелов в строке. Ее удобно использовать для форматирования и очистки данных в строках фиксированной длины.
Функция String(number, character) содержит следующие аргументы:
number - Значение типа Long. Длина возвращаемой строки.
character - Значение типа Variant. Код символа или строковое выражение, первый символ которого используется при создании возвращаемой строки.
Определение длины строки. При работе со строками переменной длины удобно использовать функцию Len(строка), возвращую значение типа Long, содержащее число символов в строке
Выравнивание строки. Оператор Lset - выравнивает строку по левому краю строковой переменной или копирует переменную одного определяемого пользователем тип в переменную другого типа, также определенного пользователем.
LSet переменная = строка
LSet имяПеременной1 = имяПеременной2
Здесь строка - строковое выражение, которое следует выровнять по левому краю строки переменная. Все оставшиеся символы в строке переменная LSet заменяет на пробелы. Если строка длиннее, чем переменная, LSet копирует в переменную столько начальных символов строки, сколько в ней поместится.
Rset - то же самое, но выравнивает строку по правому краю строковой переменной. Если длина строки переменная больше, чем строка, инструкция RSet заменяет все оставшиеся символы вплоть до начала строки переменная пробелами.
Обработка строк. Для разнообразной обработки строк применяются функции InStr, Left, LTrim, Mid, Right, RTrim, Trim.
InStr - Возвращает значение типа Long, указывающее позицию первого вхождения одной строки внутри другой строки.
InStr([start, ]string1, string2[, compare])
Синтаксис функции InStr содержит следующие аргументы:
start - числовое выражение, задающее позицию, с которой начинается каждый поиск. Если этот аргумент опущен, поиск начинается с первого символа строки. Указание аргумента start является обязательным, если указан аргумент compare.
string1 - Строковое выражение, в котором выполняется поиск.
string2 - Искомое строковое выражение.
compare - Указывает способ сравнения строк. Аргумент compare может быть опущен или иметь значение 0 или 1. Чтобы выполнить двоичное сравнение, следует указать 0 (это значение используется по умолчанию). Чтобы выполнить посимвольное сравнение без учета регистра, следует указать 1. Если аргумент compare опущен, способ сравнения строк определяется значением параметра инструкции Option Compare.
Возвращаемые значения
string1 является пустой строкой 0
string2 является пустой строкой start
string2 не найдена 0
string2 найдена в string1 Позиция обнаруженной подстроки
start > string2 0
Left - возвращает значение типа String, содержащее указанное число первых символов строки.
Left(string, length)
Здесь string - строковое выражение, из которого извлекаются символы. length - значение типа Variant (Long), числовое выражение, указывающее число возвращаемых символов. Если 0, возвращается пустая строка (""). Если значение length больше либо равняется числу символов в строке string, возвращается вся строка.
Для определения числа символов в строке string следует использовать функцию Len.
Ltrim, Rtrim, Trim - возвращают значение типа String, содержащее копию строки, из которой удалены пробелы, находившиеся в начале строки (LTrim), в конце строки (RTrim) или в начале и конце строки (Trim).
LTrim(строка), RTrim(строка), Trim(строка)
Обязательный аргумент строка представляет любое допустимое строковое выражение.
Mid - Возвращает значение типа Variant (String), содержащее указанное число символов строки.
Mid(string, start[, length])
Здесь string - строковое выражение, из которого извлекаются символы, start - значение типа Long. Позиция символа в строке string, с которого начинается нужная подстрока. Если start больше числа символов в строке string, функция Mid возвращает пустую строку ("").
length - значение типа Variant (Long). Число возвращаемых символов. Если этот аргумент опущен или превышает число символов, расположенных справа от позиции start, то возвращаются все символы от позиции start до конца строки.
Right - Возвращает значение типа String, содержащее указанное число последних символов строки.
Right(string, length)
Здесь string - строковое выражение, из которого извлекаются символы. length - значение типа Variant (Long). Числовое выражение, указывающее число возвращаемых символов. Если 0, возвращается пустая строка (""). Если превышает число символов в строке string, возвращается вся строка.
Работа с кодами ASCII.
Asc - Возвращает значение типа Integer, представляющее код символа для первого символа строки.
Asc(строка)
Аргумент строка является любым допустимым строковым выражением. Если строка не содержит символов, возникает ошибка выполнения. Возвращаемые значения лежат в диапазоне 0 - 255.
Chr - возвращает значение типа String, содержащее символ, соответствующий указанному коду символа.
Chr(кодСимвола)
Обязательный аргумент кодСимвола является значением типа Long, определяющим символ.
Коды 0-31 соответствуют стандартным управляющим символам ASCII. Например, Chr(10) возвращает символ перевода строки. Обычным диапазоном значений аргумента кодСимвола является интервал 0-255.
Пример: Заменить в строке буквы А, Б, В на 1, 2, 3 соответственно
Sub пример6()
Dim s As String, sn As String, t As String
Dim l As Integer, i As Integer
Call read("g1", s)
l = Len(s)
For i = 1 To l
t = Mid(s, i, 1)
Select Case t
Case "А": sn = sn + "1"
Case "Б": sn = sn + "2"
Case "В": sn = sn + "3"
Case Else: sn = sn + t
End Select
Next i
Call out("h1", sn)
End Sub
Пример: Из набора слов вывести только те, у которых одинаковые первые буквы
Sub пример7()
Dim first() As String, s As String, n As Integer, i As Integer, k As Integer
i = 0: k = 0
Do While Лист1.Range("g" & i+1).Text <> ""
i = i + 1
s = Лист1.Range("g" & i).Text
ReDim Preserve first(1 To i)
first(i) = Left(s, 1)
Loop
Лист1.Range("h1", "h" & i).Clear
For n = 1 To i
If n <> i Then
For k = n + 1 To i
If first(k) = first(n) Then
Лист1.Range("h" & n).Value = Лист1.Range("g" & n).Text
Лист1.Range("h" & k).Value = Лист1.Range("g" & k).Text
End If
Next
End If
Next
End Sub