В этом уроке просто расскажу о том, что в Access'e (VBA) можно делать со строками.
Урок 3. Работа со строками.
В этом уроке просто расскажу о том, что в Access'e (VBA) можно делать
со строками.
Specially for Сергей Чаплыгин :-)
---------------------------------------------------------
Инструкция Option Compare.
Применяется на уровне модуля для задания используемого по умолчанию
способа сравнения строковых данных.
Option Compare {Binary | Text | Database}
Инструкция Option Compare при ее
использовании должна находиться в модуле перед любой процедурой.
Инструкция Option Compare указывает способ сравнения строк (Binary,
Text или Database) для модуля. Если модуль не содержит инструкцию
Option Compare, по умолчанию используется способ сравнения Binary.
Инструкция Option Compare Binary
задает сравнение строк на основе порядка сортировки, определяемого внутренним
двоичным представлением символов. В Microsoft Windows порядок сортировки
определяется кодовой страницей символов. В следующем примере представлен
типичный результат двоичного порядка сортировки:
A < B < E < Z < a < b < e
< z < Б < Л < Ш < б < л < ш
Инструкция Option Compare Text задает
сравнение строк без учета регистра символов на основе системной национальной
настройки. Тем же символам, что и выше, при сортировке с инструкцией Option
Compare Text соответствует следующий порядок:
Инструкция Option Compare Database
может использоваться только в Microsoft Access. При этом задает сравнение
строк на основе порядка сортировки, определяемого национальной настройкой
базы данных, в которой производится сравнение строк.
В Microsoft Access все модули по умолчанию содержат в разделе описаний
инструкцию Option Compare Database.
Данная инструкция указывает, что в этом модуле используется метод сравнения
строк, определенный для всей базы данных. Для изменения используемого в
базе данных метода сравнения строк выберите в меню Сервис команду Параметры,
выберите вкладку Общие и выберите нужное значение в раскрывающемся списке
Порядок сортировки базы. По умолчанию задается "Обычный порядок", указывающий
сортировку по английскому алфавиту без учета регистра.
Изменение параметра, выбираемого в поле со списком Порядок сортировки
базы данных, не приводит к изменению способа сравнения строк в текущей
базе данных. Затрагиваются толко базы данных, создаваемые после изменения
этого параметра. Для того чтобы использовать в отдельном модуле метод сравнения
строк, отличный от заданного для базы данных, следует заменить инструкцию
Option Compare Database на
Option Compare Binary или Option Compare
Text. Инструкция Option Compare Binary
задает сравнение строк с помощью значений кодов ASCII, соответствующих
символам, в результате чего сравнение и сортировка будут выполняться с
учетом регистра. Инструкция Option Compare Text
задает выполнение операций без учета регистра.
Примечание. Если используется свойство Bookmark
объекта Recordset (набор записей),
необходимо включить в раздел описаний модуля инструкцию Option
Compare Binary. Значение свойства Bookmark
задается и возвращается в виде массива Variant, содержащего данные типа
Byte. Если задан метод сравнения строк без учета регистра, то использование
свойства Bookmark может привести к
переходу на неверную запись.
Возвращает значение типа Long, содержащее
число символов в строке или число байт, необходимое для размещения переменной.
Len(строка | имяПеременной)
строка - любое допустимое строковое выражение. Если строка имеет значение
Null, возвращается значение Null.
имяПеременной - любое допустимое
имя переменной. Если имяПеременной
имеет значение Null, возвращается значение
Null. Если имяПеременной
является значением типа Variant, функция
Len обрабатывает его так же, как и
значение типа String, и всегда возвращает
число содержащихся в нем символов.
Из двух возможных аргументов должен быть указан один (и только один).
Для определяемых пользователем типов Len
возвращает размер, который требуется для записи переменной в файл. Эквивалентной
функцией обработки строк по байтам является функция LenB,
которая возвращает число байт, используемое для представления указанной
строки, а не число символов в строке. Для определяемых пользователем типов
функция LenB возвращает размер, занимаемый
в памяти, включая заполнение промежутков между элементами. Функция Len
не всегда может корректно определить число байт, необходимое для размещения
строк переменной длины в определяемых пользователем типах данных.
Пример:
Если strText = "Microsoft Access", то Len(strText)
= 16 Если strText = Null, то Len(strText) = Null
Возвращает значение типа Variant (Long),
указывающее позицию первого вхождения одной строки внутри другой строки.
InStr([start, ]string1, string2[, compare])
start - Необязательный. Числовое
выражение, задающее позицию, с которой начинается каждый поиск. Если этот
аргумент опущен, поиск начинается с первого символа строки. Если start
имеет значение Null, возникает ошибка.
Указание аргумента start является обязательным, если указан аргумент compare.
string1 - Обязательный. Строковое
выражение, в котором выполняется поиск.
string2 - Обязательный. Искомое
строковое выражение.
compare - Необязательный. Указывает
способ сравнения строк. Аргумент compare может быть опущен или иметь значение
0, 1 или 2. Чтобы выполнить двоичное сравнение, следует указать 0 (это
значение используется по умолчанию). Чтобы выполнить посимвольное сравнение
без учета регистра, следует указать 1. Только в Microsoft Access допускается
использование значения 2 для выполнения сравнения на основании сведений,
содержащихся в базе данных. Если аргумент compare
имеет значение Null, возникает ошибка.
Если аргумент compare опущен, способ
сравнения строк определяется значением параметра инструкции Option
Compare.
Если string1 является пустой строкой, то значение
функции InStr = 0 Если string1 имеет значение Null, то значение
функции InStr = Пустое значение Если string2 является пустой строкой, то значение
функции InStr = start Если string2 имеет значение Null, то значение
функции InStr = Пустое значение Если string2 не найдена, то значение функции
InStr = 0 Если string2 найдена в string1, то значение
функции InStr = Позиция обнаруженной подстроки Если start > string2, то значение функции
InStr = 0
Эквивалентной функцией обработки строк по байтам является функция InStrB,
которая возвращает позицию байта (а не символа), соответствующую положению
одной строки внутри другой строки.
Используя функции Len и InStr
напишем функцию нахождения количества вхождений одной строки в другую.
Функции и инструкции работы со строками.
Для работы со строками в VBA существуют следующие функции и инструкции:
Функции: Len, InStr, StrComp, Left, Right,
Mid, LTrim, RTrim, Trim, Space, String, Asc, Chr, UCase, LCase.
Инструкции: Option Compare, Mid.
'Счетчик
вхождений подстроки strText2 в
'строке
strText1
Dim
lngCount As Long
'"Стартовое"
значение текущей позиции:
' стартовая
позиция минус длинна строки strText2
lngPosition = lngStartPosition
- Len(strText2)
'"Стартовое"
счетчика вхождений: -1
lngCount = -1
'Такие
"экотические" начальные значения текущей позиции
'и счетчика
вхождений нужны для того, чтобы после
'первого
прохода цикла они были правильными вне
'звисимость
от наличия подстроки strText2 в строке
'strText1.
При этом отпадает необходимость
'дополнительных
проверок, код функции становиться более
'оптимальным.
'Цикл
Do
'Вычисляем
текущую позицию вхождения подстроки
'strText2
в строку strText1, начиная с "текущей
'позиции
+ длинна строки strText2".
lngPosition = InStr(lngPosition
+ Len(strText2), _
strText1, strText2)
'Инкримируем
счетчик вхождений
lngCount = lngCount
+ 1
'Заканчиваем
цикл если текущая позиция = 0
Loop
Until lngPosition = 0
'Присваиваем
функции значение счетчика вхождений
StrUtils_GetCountSubStrings
= lngCount
'Примеры
вызова:
' ? StrUtils_GetCountSubStrings("Иванов
Иван Иванович", _
' "Иван")
' ? StrUtils_GetCountSubStrings("Иванов
Иван Иванович", _
' "Иван",
2)
End
Function
Функция StrComp.
Возвращает значение типа Variant (Integer), представляющее результат
сравнения строк.
compare - Необязательный. Указывает способ сравнения строк. Аргумент
compare может быть опущен или иметь значение 0, 1 или 2. Чтобы выполнить
двоичное сравнение, следует указать 0 (это значение используется по умолчанию).
Чтобы выполнить посимвольное сравнение без учета регистра, следует указать
1. Только в Microsoft Access допускается использование значения 2 для выполнения
сравнения на основании сведений, содержащихся в базе данных. Если аргумент
compare имеет значение Null, возникает
ошибка. Если аргумент compare опущен, способ сравнения строк определяется
значением параметра инструкции Option Compare.
Если string1 меньше чем string2 , то значение
функции StrComp = -1 Если string1 равняется string2, то значение
функции StrComp = 0 Если string1 больше чем string2, то значение
функции StrComp = 1 Если string1 или string2 имеет значение Null,
то значение функции StrComp = Null
Возвращает значение типа Variant (String),
содержащее указанное число первых символов строки.
Left(string, length)
string - Обязательный. Строковое
выражение, из которого извлекаются символы. Если string имеет значение
Null, возвращается значение Null.
length - Обязательный. Значение
типа Variant (Long) . Числовое выражение,
указывающее число возвращаемых символов. Если 0, возвращается пустая строка
(""). Если значение length больше либо
равняется числу символов в строке string,
возвращается вся строка.
Для определения числа символов в строке string
следует использовать функцию Len. Эквивалентной
функцией обработки строк по байтам является функция LeftB.
В этом случае length указывает число
байт (а не символов), которые следует вернуть.
Пример:
Если string = "Иванов", то Left(string,
3) = "Ива"
Возвращает значение типа Variant (String),
содержащее указанное число последних символов строки.
Right(string, length)
string - Обязательный. Строковое
выражение, из которого извлекаются символы. Если string
имеет значение Null, возвращается значение
Null.
length - Обязательный. Значение
типа Variant (Long) . Числовое выражение,
указывающее число возвращаемых символов. Если 0, возвращается пустая строка
(""). Если превышает число символов в строке string,
возвращается вся строка.
Для определения числа символов в строке string
следует использовать функцию Len. Эквивалентной
функцией обработки строк по байтам является функция RightB.
В этом случае аргумент length указывает
число байт (а не символов), которые следует вернуть.
Пример:
Если string = "Иванов", то Right(string,
3) = "нов"
Возвращает значение типа Variant (String),
содержащее указанное число символов строки.
Mid(string, start[, length])
string - Обязательный. Строковое
выражение, из которого извлекаются символы. Если string
имеет значение Null, возвращается значение
Null.
start - Обязательный. Значение
типа Long. Позиция символа в строке
string, с которого начинается нужная
подстрока. Если start больше числа
символов в строке string, функция Mid
возвращает пустую строку ("").
length - Необязательный. Значение
типа Variant (Long). Число возвращаемых
символов. Если этот аргумент опущен или превышает число символов, расположенных
справа от позиции start, то возвращаются
все символы от позиции start до конца
строки.
Для определения числа символов в string
следует использовать функцию Len. Эквивалентной
функцией обработки строк по байтам является функция MidB.
В этом случае аргументы указывают число байт (а не символов).
Пример:
Если string = "Иванов", то Mid(string, 3,2)
= "но", а Mid(string, 3) = "нов"
Заменяет указанное число символов в переменной типа Variant
(String) символами из другой строки.
Mid(переменная, начало[, длина]) = строка
переменная - Обязательный. Имя строковой
переменной, подлежащей изменению.
начало - Обязательный. Значение
типа Variant (Long). Позиция символа
в переменной, с которого начинается замена.
длина - Необязательный. Значение
типа Variant (Long). Число символов,
подлежащих замене. Если этот аргумент опущен, используется вся строка.
строка - Обязательный. Строковое
выражение, предназначенное для замены части строки переменная.
Число замененных символов не может превышать число символов в переменной.
Эквивалентной инструкцией обработки строк по байтам является инструкция
MidB. В этом случае аргумент начало
указывает в строке переменная позицию байта, с которого начинается замена,
а длина - число байт, подлежащих замене.
Пример:
Если сначала переменная = "Иванов", то после выполнения спрочки Mid(переменная,
3,2) = "ру" переменная = "Иварув"
Возвращают значение типа Variant (String),
содержащее копию строки, из которой удалены пробелы, находившиеся в начале
строки (LTrim), в конце строки
(RTrim) или в начале и конце строки (Trim).
LTrim(строка) RTrim(строка) Trim(строка)
Обязательный аргумент строка представляет любое допустимое строковое
выражение. Если строка имеет значение Null,
возвращается значение Null.
Возвращает значение типа Variant (String),
содержащее указанное число пробелов.
Space(число)
Обязательный аргумент число указывает нужное число пробелов в строке.
Функцию Space удобно использовать для форматирования и очистки данных в
строках фиксированной длины.
Возвращает значение типа Variant (String),
содержащее повторяющуюся строку указанной длины.
String(number, character)
number - Обязательный. Значение
типа Long. Длина возвращаемой строки.
Если number имеет значение Null,
возвращается значение Null.
character - Обязательный. Значение
типа Variant. Код символа или строковое
выражение, первый символ которого используется при создании возвращаемой
строки. Если character имеет значение Null,
возвращается значение Null.
Значения аргумента character, превышающие
255, преобразуются функцией String
в допустимые коды символов по следующей формуле: character
Mod 256
Возвращает значение типа Integer,
представляющее код символа для первого символа строки.
Asc(строка)
Обязательный аргумент строка является любым допустимым строковым выражением.
Если строка не содержит символов, возникает ошибка выполнения.
Возвращаемые значения лежат в диапазоне 0 - 255 для однобайтовых наборов,
и в диапазоне -32768 - 32767 для двухбайтовых наборов символов (DBCS).
Для работы с байтами данных, содержащихся в строке, предназначена другая
функция (AscB). Вместо кода первого
символа AscB возвращает первый байт.
Функция AscW возвращает код символа,
соответствующий кодировке Unicode, за исключением платформ, в которых
Unicode не поддерживается и поведение функции аналогично функции
Asc.
Напишем функцию StrUtils_InStrAsWord,
возвращающую позицию строки strText2 в строке
strText1 как целого слова начиная с позиции
lngStartPosition.
Dim
lngPosition As Long
'Текущая позиция подстроки strText2
в строке strText1
Dim
lngCount As Long
'Счетчик вхождений подстроки strText2
в строке strText1
Dim
lngASCII_First As Long 'ASCII-код
символа, стоящего
перед искомой строкой
Dim
lngASCII_Last As Long 'ASCII-код
символа, стоящего
после искомой строки
Dim
blIsWord As Boolean
'Признак того, что строка strText2 входит в
строку strText1 как слово
'Добавляем
по одному пробелу перед и после строки strText1. Делаем это для того, чтобы
в процессе работы функции не возникала ошибка, когда бужем считывать символы
перед и после найденного вхождения
strText1 = " " & strText1
& " "
'Увеличиваем
стартовую позицию на еденицу
(т.к.
добавили перед строкой пробел)
lngStartPosition = lngStartPosition
+ 1
'"Стартовое"
значение текущей позиции: стартовая позиция минус длинна строки strText2
lngPosition = lngStartPosition
- Len(strText2)
'"Стартовое"
значение счетчика вхождений: 0
lngCount = 0
Do
'Цикл
'Вычисляем
текущую позицию вхождения подстроки strText2 в строку
strText1
начиная с "текущей позиции + длинна строки strText2".
lngPosition = InStr(lngPosition
+ Len(strText2), strText1, strText2)
'Если
"текущей позиции" <> 0 - т.е. strText2 входит
в строку
strText1...
If
lngPosition <> 0 Then
'Считываем
ASCII-коды символов, находящихся
перед и после найденной строки
lngASCII_First
= Asc(Mid(strText1, lngPosition - 1, 1))
lngASCII_Last
= Asc(Mid(strText1, lngPosition + Len(strText2), 1))
blIsWord
= True 'Признак = TRUE
'Анализируем
код символа перед вхождением строки strText2
Select Case lngASCII_First
'Если
код принадлежит диатазонам "непечатных" символов...
Case 0 To 47, 58 To 64, 91 To 96, 123 To 191
'Ничего
не делаем
'Иначе...
Case Else
'Признак
= FALSE
blIsWord = False
End Select
'Если
Признак = TRUE...
If blIsWord = True Then
'Анализируем
код символа после вхождением строки strText2
Select Case lngASCII_Last
'Если
код принадлежит диатазонам "непечатных" символов...
Case 0 To 47, 58 To 64, 91 To 96, 123 To 191
'Ничего
не делаем
'Иначе...
Case Else
'Признак
= FALSE
blIsWord = False
End Select
End If
'Если
Признак = TRUE ...
If blIsWord = True Then
'Уменьшаем
на еденицу текущую позицию
(т.к. в начало строчки был добавлен пробел)
lngPosition = lngPosition - 1
'Выходим
из цикла
Exit Do
End If
End
If
Loop
Until lngPosition = 0 'Заканчиваем
цикл если текущая позиция = 0
'Присваиваем
функции значение текущей позиции
StrUtils_InStrAsWord = lngPosition
'Примеры
вызова:
' ? StrUtils_InStrAsWord("Иванов
Иван Иванович", "Иван")
' ? StrUtils_InStrAsWord("Иванов
Иван Иванович", "Иван", 2)
End
Function
Модифицируем функцию StrUtils_InStrAsWord
в функцию StrUtils_GetCountSubStringsAsWord,
возвращающую количество вхождений строки strText2
в строку strText1 как целого слова начиная
с позиции lngStartPosition.
'Будем
считать "непечатными" символы, ASCII-коды которых
'лежат
в следующих диапазонах: 0-47, 58-64, 91-96, 123-191
Dim
lngPosition As Long
'Текущая позиция подстроки strText2
в строке strText1
Dim
lngCount As Long
'Счетчик вхождений подстроки strText2
в строке strText1
Dim
lngASCII_First As Long 'ASCII-код
символа, стоящего
перед искомой строкой
Dim
lngASCII_Last As Long 'ASCII-код
символа, стоящего
после искомой строки
Dim
blIsWord As Boolean
'Признак того, что строка strText2 входит в
строку strText1 как слово
'Добавляем
по одному пробелу перед и после строки strText1. Делаем это для того, чтобы
в процессе работы функции не возникала ошибка, когда бужем считывать символы
перед и после найденного вхождения
strText1 = " " & strText1
& " "
'Увеличиваем
стартовую позицию на еденицу
(т.к.
добавили перед строкой пробел)
lngStartPosition = lngStartPosition
+ 1
'"Стартовое"
значение текущей позиции: стартовая позиция минус длинна строки strText2
lngPosition = lngStartPosition
- Len(strText2)
'"Стартовое"
значение счетчика вхождений: 0
lngCount = 0
Do
'Цикл
'Вычисляем
текущую позицию вхождения подстроки strText2 в строку
strText1
начиная с "текущей позиции + длинна строки strText2".
lngPosition = InStr(lngPosition
+ Len(strText2), strText1, strText2)
'Если
"текущей позиции" <> 0 - т.е. strText2 входит
в строку
strText1...
If
lngPosition <> 0 Then
'Считываем
ASCII-коды символов, находящихся
перед и после найденной строки
lngASCII_First
= Asc(Mid(strText1, lngPosition - 1, 1))
lngASCII_Last
= Asc(Mid(strText1, lngPosition + Len(strText2), 1))
blIsWord
= True 'Признак = TRUE
'Анализируем
код символа перед вхождением строки strText2
Select Case lngASCII_First
'Если
код принадлежит диатазонам "непечатных" символов...
Case 0 To 47, 58 To 64, 91 To 96, 123 To 191
'Ничего
не делаем
'Иначе...
Case Else
'Признак
= FALSE
blIsWord = False
End Select
'Если
Признак = TRUE...
If blIsWord = True Then
'Анализируем
код символа после вхождением строки strText2
Select Case lngASCII_Last
'Если
код принадлежит диатазонам "непечатных" символов...
Case 0 To 47, 58 To 64, 91 To 96, 123 To 191
'Ничего
не делаем
'Иначе...
Case Else
'Признак
= FALSE
blIsWord = False
End Select
End If
'Если
Признак = TRUE то инкримируем счетчик вхождений
If blIsWord = True Then
lngCount = lngCount + 1
End
If
Loop
Until lngPosition = 0 'Заканчиваем
цикл если текущая позиция = 0
'Присваиваем
функции значение счетчика вхождений
StrUtils_GetCountSubStringsAsWord
= lngCount
'Примеры
вызова:
' ? StrUtils_GetCountSubStringsAsWord("Иванов
Иван Иванович", "Иван")
' ? StrUtils_GetCountSubStringsAsWord("Иванов
Иван Иванович", "Иван", 2)
End
Function
Функция Chr.
Возвращает значение типа String,
содержащее символ, соответствующий указанному коду символа.
Chr(кодСимвола)
Обязательный аргумент кодСимвола
является значением типа Long, определяющим
символ.
Коды 0-31 соответствуют стандартным управляющим символам ASCII.
Например, Chr(10) возвращает символ
перевода строки. Обычным диапазоном значений аргумента кодСимвола является
интервал 0-255. Однако в системах DBCS допустимыми являются значения
аргумента кодСимвола от -32768 до 65536. Эквивалентной функцией
побайтовой обработки значений типа String
является функция ChrB. Эта функция
всегда возвращает один байт, а не символ, который может занимать один или
два байта. Функция ChrW возвращает
значение типа String, содержащее символ
в основном формате Unicode, за исключением платформ, в которых Unicode
не поддерживается и функция работает аналогично функции Chr.
Возвращает значение типа Variant (String),
содержащее строку, преобразованную к верхнему регистру.
UCase(строка)
Обязательный аргумент строка представляет любое допустимое строковое
выражение. Если строка имеет значение Null,
возвращается значение Null. К верхнему
регистру преобразуются только строчные буквы; прописные буквы и прочие
символы остаются неизменными.
Возвращает значение типа String,
представляющее строку, преобразованную к нижнему регистру.
LCase(строка)
Обязательный аргумент строка представляет любое допустимое строковое
выражение. Если строка имеет значение Null,
возвращается значение Null. К нижнему
регистру преобразуются только прописные буквы; строчные буквы и прочие
символы остаются неизмененными.
Напишем функцию, которая будет возвращать lngNumber-е
по счету слово в строке strText, в которой
слова разделены символом (строкой) strDec.
Если пареметр strDec пропущен - разделителем
слов считается' любой "непечатный" символ.
Dim
lngFirstPos As Long
Dim
lngNextPos As Long
Dim
lngStartPosition As Long
Dim
i As Long
Dim
strTempText As String
Dim
lngPosition As Long
Dim
lngCount As Long
If
IsMissing(strDec) Then
strText = strText
& " "
For
i = 1 To Len(strText)
Select Case Asc(Mid(strText,
i, 1))
Case 0 To 47, 58 To 64, 91 To 96, 123 To 191
lngCount = lngCount + 1
If lngCount = lngNumber Then
StrUtils_GetWordDec = strTempText
Exit For
End If
strTempText = ""
Case Else
strTempText = strTempText & Mid(strText, i, 1)
End Select
Next
i
Else
strText = " " &
strDec & strText & strDec & " "
lngStartPosition
= 2
lngPosition = lngStartPosition
- Len(strDec)
lngCount = 0
Do
lngPosition = InStr(lngPosition + Len(strDec), strText, strDec)
If lngPosition <> 0 Then
lngCount = lngCount + 1
If lngNumber = lngCount Then
lngFirstPos = lngPosition
End If
If lngNumber + 1 = lngCount Then
lngNextPos = lngPosition
Exit Do
End If
End If
Loop
Until lngPosition = 0
If
lngFirstPos <> 0 And lngNextPos <> 0
Then
StrUtils_GetWordDec = Mid(strText, lngFirstPos + 1, lngNextPos - lngFirstPos
- 1)
End
If
End
If
End
Function
Напишем функцию, возвращающую переданную в нее строку strText,
"вырезая" из нее lngNumber-е по счету слово,
в которой слова разделены символом (строкой) strDec.
Если параметр strDec пропущен - разделителем
слов считается любой "непечатный" символ.
Dim
lngFirstPos As Long
Dim
lngNextPos As Long
Dim
lngStartPosition As Long
Dim
i As Long
Dim
strTempText As String
Dim
lngPosition As Long
Dim
lngCount As Long
If
IsMissing(strDec) Then
strText = " " &
strText & " "
For
i = 1 To Len(strText)
Select Case Asc(Mid(strText,
i, 1))
Case 0 To 47, 58 To 64, 91 To 96, 123 To 191
lngCount = lngCount + 1
If lngCount = lngNumber + 1 Then
StrUtils_CutWordDec = Mid(strText, 2, i - Len(strTempText) - 2) & Mid(strText,
i + 1)
Exit For
End If
strTempText = ""
Case Else
strTempText = strTempText & Mid(strText, i, 1)
End Select
Next
i
Else
strText = " " &
strDec & strText & strDec & " "
lngStartPosition
= 2
lngPosition = lngStartPosition
- Len(strDec)
lngCount = 0
Do
lngPosition = InStr(lngPosition + Len(strDec), strText, strDec)
If lngPosition <> 0 Then
lngCount = lngCount + 1
If lngNumber = lngCount Then
lngFirstPos = lngPosition
End If
If lngNumber + 1 = lngCount Then
lngNextPos = lngPosition
Exit Do
End If
End If
Loop
Until lngPosition = 0
If
lngFirstPos <> 0 And lngNextPos <> 0
Then
If Len(strText) - lngNextPos - Len(strDec)
- 1 > 0 Then
StrUtils_CutWordDec = Mid(strText, Len(strDec) + 2, lngFirstPos - (Len(strDec)
+ 1)) & Mid(strText, lngNextPos + 1, Len(strText) - lngNextPos - Len(strDec)
- 1)
Else
StrUtils_CutWordDec = Mid(strText, Len(strDec) + 2, lngFirstPos - (Len(strDec)
+ 1))
End If
End
If
End
If
End
Function
Напишем функцию, которая возвращает переданную в нее строку, "печатая"
ее справа налево