- •Компьютерные информационные технологии
- •Часть 1
- •Лабораторная работа №1 Электронная таблица Excel. Макросы.
- •Варианты заданий
- •Лабораторная работа №2 итерфейс редактора vba. Элементы управления vba
- •Лабораторная работа №3 разработка линейной программы на vba
- •Лабораторная работа №4 алгоритмы и программы разветвляющейся структуры. Условный оператор if
- •Краткие теоретические сведения:
- •If условие Then [операторы 1] [Else операторы 2]
- •If условие Then
- •3 Этап. Загрузить редактор vba и разработать приложение. Порядок выполнения работы:
- •Содержание отчета.
- •Контрольные вопросы
- •Задания к выполнению:
- •2 Часть. Программирование с использованием объектов excel.
- •Порядок выполнения работы:
- •Лабораторная работа № 5 оператор выбора select case
- •Лабораторная работа № 6
- •Vba. Цикл с параметром (for…next)
- •1.Цикл For.
- •2.Массивы.
- •Лабораторная работа №7
- •Vba. Циклы с предусловием и постусловием.
- •Лабораторная работа № 8 алгоритмы обработки массивов
- •1 Алгоритм определения максимального (минимального) значения элементов массива
- •2 Алгоритм нахождения суммы и произведения элементов массива
- •3 Алгоритмы сортировки элементов массива
- •Лабораторная работа № 9
- •Vba. Пользовательские процедуры
- •Лабораторная работа № 10
- •Vba. Пользовательские функции
- •Лабораторная работа № 11 Операторы и функции для обработки строк
Лабораторная работа № 11 Операторы и функции для обработки строк
Цель работы – получение навыков написания программ со строковыми функциями.
Теоретические положения
В VBA имеется богатая коллекция операторов и функций для форматирования строк и извлечение тех их частей, которые вы сочтете особенно привлекательно.
Таблица операторов и функций для обработки строк
Оператор или функция |
Тип |
Выполняемые действия (для операторов) или возвращаемые значения (для функций) |
Asc (строка) |
Функция |
Числовой код первого символа в строке |
Сhr (код символа) |
Функция |
Символ, соответствующий значению параметра код символа |
Filter (массив_ источник, эталон, включает, метод_ сравнения) |
Функция (только в VBA6) |
Массив, состоящий только из тех строк из массива-источника, которые содержат эталон. Аргумент массив_источник должен быть массивом строковых значений. Если необязательный аргумент включает равен False, то функция возвратит только строки, которые не включают эталон |
Hex (число) |
Функция |
Строка, содержащая шестнадцатеричное представление числа |
InStr (старт, строка1, строка2) |
Функция |
Число, соответствующее позиции строки 2 в строке 1; поиск начинается с позиции старт, этот аргумент не обязателен |
InStrRev (строка1, строка2, старт) |
Функция (только в VBA6) |
Число, соответствующее позиции строки 2 в строке 1, считая с правого края строки 1, поиск начинается с позиции старт, этот аргумент не обязателен
|
Join (массив_строк, разделитель) |
Функция (только в VBA6) |
Одна строка, комбинирующая все строки из массив_строк, который должен быть массивом строковых данных. По умолчанию Join вставляет пробел между строками, взятыми из массива строк, но можно задать и другой символ разделителя (символ необходимо заключить в кавычки) |
Left (строка, длина) |
Функция |
Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с левого края последней |
Len (строка) |
Функция |
Число символов в строке |
LCase (строка) |
Функция |
Копия строки, представленная символами нижнего регистра |
LSet строковая_ переменная = строка |
Оператор |
Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки начиная с левого края переменной |
LTrim (строка) |
Функция |
Новая строка, содержащая копию данной строки без пробелов в начале |
Mid (строка, старт, длина) |
Функция |
Новая строка заданной длины из символов данной строки, взятых подряд, начиная с позиции старт |
Mid (строковая перем енная, старт, длина) = строка
|
Оператор |
Начиная с позиции старт заменяет символами данной строки заданное аргументом длина число символов в строковой переменной |
Oct (число) |
Функция |
Строка, содержащая восьмеричное представление числа |
Replace (строка, найти, заменить, старт, число_замен, метод_сравнения) |
Функция (только в VBA6) |
Новая строка, получаемая в результате замены в заданной строке текста найти текстом заменить. Аргументы старт, число_замен и метод_сравнения не обязательны. Используйте число_замен, чтобы указать, сколько замен следует сделать, если текст найти встречается несколько раз (по умолчанию заменяются все случаи появления текста найти в строке) |
Right (строка, длина) |
Функция |
Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с правого края последней
|
RSet строковая переменная = строка |
Оператор |
Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки с правого края переменной
|
RTrim(строка) |
Функция |
Новая строка, содержащая копию данной строки без пробелов в конце |
Space(число) |
Функция |
Строка, состоящая из указанного числа пробелов |
Split (стрка, разделитель, предел, метод сравнения) |
Функция (только в VBA6) |
Массив строк, полученный в результате разделения заданной строки. По умолчанию оригинальная строка разделяется по пробелам, но можно задать разделитель, отличный от пробела (для задания разделителя используйте символ, заключенный в кавычки). Необязательный аргумент предел задает максимальное число строк в возвращаемом массиве |
StrComp (строка1, строка2) |
Функция |
0, если две строки равны; -1, если строка 1 меньше, чем трока2; 1, если строка1 больше, чем строка2 |
StrConv (строка,метод_перевода) |
Функция |
Новая строка, созданная на основе заданной указанным методом перевода
|
String (число, символ) |
Функция |
Строка, состоящая из заданного числа повторяющихся символов |
StrReverse (строка) |
Функция (только в VBA6) |
Строка, содержащая символы заданной строки в обратном порядке |
Trim(строка) |
Функция |
Новая строка, содержащая копию данной строки без пробелов в начале и конце |
Ucase(строка) |
Функция |
Копия строки, представленная символами верхнего регистра |
Отбрасывание символов в конце строк с помощью Len и Left
Представим, например, что у вас список полных имен в виде следующих строк:
“Самодур, Иван Акакиевич, акад.”
“Невеселый, Степан Федорович, проф.”
“Шутник, Василий Степанович, канд.”
(такой список должен хранится в массиве строк)
Предположим, что кто-то заставил вас убрать звания из выше перечисленных строк. Имена в списке имеют разную длину, так, что готовые функции задачу не решают. Но если предположить, что оригинальное имя содержит в переменной strСтарая, то поможет следующий трюк:
strНовая = Left(strСтарая, Len(strСтарая)-7)
Если бы VBA читал книги вместо программного кода, я бы объяснил ему, что эти действия можно выполнить следующим образом.
1. Сначала вызывается функция Len, которая вычисляет длину оригинальной строки.
2. Из результата, полученного в п. 1, вычитается 7, поскольку каждое из званий занимает семь символов в конце строки (включая запятую и пробел).
В результате получится число, которому должна быть равно длине новой строки.
3. Вызывается функция Left, использующая вычисленную длину в качестве значения второго аргумента.
Функция Left читает столько символов, сколько задано вторым аргументом, из строки, указанной первым аргументом, возвращая только эти прочитанные символы.
4. Новая, более короткая строка, возвращенная функцией Left, присваивается переменной strНовая.
Извлечение символов из cтрок
Продолжая работать теперь с новым списком уже без званий, предположим, что теперь вас попросили извлечь имена с отчествами и поместить их в новый список Эту задачу можно выполнить с помощью следующего оператора
Функция Mid извлекает символы из любого места в строке, которую вы укажете в виде аргумента Второй же аргумент этой функции говорит, с какого места в этой строке следует начать извлечение символов. В данном случае этот аргумент представляет собой выражение, состоящее из функции inStr плюс 2
Функция InStr ищет в заданной строке (первый аргумент) другую строку (второй аргумент). В данном случае второй аргумент — это запятая, которая в списке следует за фамилией Значение, которое возвращает InStr, соответствует номеру позиции в первой строке, где встречается вторая строка, — теперь вы знаете, где заканчивается фамилия
К значению, возвращенному функцией InStr, добавляется 2, чтобы пропустить запятую и следующий за ней пробел и найти позицию, с которой начинается имя Теперь функция Mid извлечет символы начиная с этого места и до конца строки (поскольку не указан третий, необязательный аргумент длина)
Условия задач:
Задача 1.
Написать и протестировать функцию STRP(str1,str2), которая возвращает позицию первого вхождения символа из строки str2 в строку str1. Если не один символ строки str2 не входит в строку str1, то возвратить NULL.
Задача 2.
Ввести предложение, слова в котором разделены пробелами и запятыми. Распечатать это предложение, удалив из него те слова , которые встретились там более одного раза.
Задача 3.
Написать и протестировать функцию DELETE (s1,s2), которая удаляет из строки s1 все символы, встречающиеся в строке s2.
Задача 4.
Даны две символьные строки состоящие только из цифр (длина каждой - более 10 символов). Считая, что в этих строках находятся очень длинные целые числа, сформировать третью строку - сумму этих чисел.
Задача 5.
Написать и протестировать функцию ESCAPE(str1,str2), которая при копировании текста из str1 в str2 преобразует литеры "новая строка" и "табуляция" в видимые в последовательности литер \n и \t. Сделать также функцию, выполняющую обратное преобразование.
Задача 6.
Написать и протестировать функцию I_TO_B(n,s,b), которая переводит целое число n в строку s, представляющую число в системе счисления вс основанием b.
Задача 7.
Написать и протестировать функцию NXT_BLNK(str,pos), которая анализирует строку str, начиная с позиции pos, и возвращает номер первого найденного пробела. Если пробела нет, возвращает 0; если pos <0 или больше длины строки,то возвращается -1.
Задача 8.
Составить программу, которая реверсирует каждое слово строки str.