Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка1_лаб.doc
Скачиваний:
17
Добавлен:
04.11.2018
Размер:
1.26 Mб
Скачать

Лабораторная работа № 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.