Лабораторная работа по строкам

 

 

Оператор или функция

Тип

Выполняемые действия (для операторов) или возвращаемые значения (для функций)

Asc (строка)

Функция

Числовой код первого символа в строке

СЬг(код символа)

Функция

Символ, соответствующий значению параметра кодсимвола

Filter (массив источник, эталон, включает, метод сравнения)

Функция (только в VBA6)

Массив, состоящий только из тех строк из массива-источника, которые содержат эталон Аргумент мае-сивисточник должен быть массивом строковых значе­ний Если необязательный аргумент включает равен False, то функция возвратит только строки, которые не включают эталон

Format(строка)

Функция

См выше раздел "Форматирование данных*

Hex(число)

Функция

Строка, содержащая шестнадцатеричное представление числа

InStr(старт, стро­ка!, строка2)

Функция

Число, соответствующее позиции строки 2 в строке 1; поиск начинается с позиции старт, этот аргумент не обязателен

InStrRev(cTpOKal, строка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(строка!, строка2)

Функция

0, если две строки равны; -1, если строка 1 меньше, чем строка2; 1, если строка! больше, чем строка2 (о срав-

UOUUU fTtVW fU rn9QU Q\ ПСПШ'1 VA^JUlk uM. 1 JluUy У)

StrConv(строка, ме-тодперевода)

Функция

Новая строка, созданная на основе заданной указанным

мвтллпи ncnoDonfi

MCIU^UM ПСръВЦЦы

String(число, сим­вол)

Функция

Строка, состоящая из заданного числа повторяющихся символов

StrReverse (строка)

Функция (только в VBA6)

Строка, содержащая символы заданной строки в обрат­ном порядке

Trim(строка)

Функция

Новая строка, содержащая копию” данной строки без пробелов в начале и конце

UCase(строка)

Функция

Копия строки, представленная символами верхнего ре­гистра

 

 

Если бы VBA читал книги вместо программного кода, я бы объяснил ему, что эти действия можно выполнить следующим образом.

 

1. Сначала вызывается функция Len, которая вычисляет длину оригинальной строки.

 

2. Из результата, полученного в п. 1, вычитается 7, поскольку каждое из зва­ний занимает семь символов в конце строки (включая запятую и пробел).

В результате получится число, которому должна быть равна длина новой строки.

 

3. Вызывается функция Left, использующая вычисленную длину в качестве значения второго аргумента.

Функция Left читает столько символов, сколько задано вторым аргумен­том, из строки, указанной первым аргументом, возвращая только эти про­читанные символы.

 

4. Новая, более короткая строка, возвращенная функцией Left, присваивает­ся переменной strHoaaH.

 

Извлечение символов из 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.

 

 

Пример решения задачи 3

 

Private Sub CommandButton1_Click()

Dim s1, s2, c1, c2, cur As String

Dim n, m, k As Integer

s1 = InputBox("Введите первую строку")

s2 = InputBox("Введите вторую строку")

n = Len(s1)                                  'вычисление длины строк

m = Len(s2)

If ((n = 0) Or (m = 0)) Then           ' проверка не пустые ли строки

 MsgBox ("Одна строка или обе пустые!!!!!!!!")

 Exit Sub

End If

k = n

For i = 1 To m                             ' Взятие поочередно символов второй                       

 c2 = Mid(s2, i, 1)                          второй строки

 For j = 1 To n

  c1 = Mid(s1, j, 1)

  If c1 = c2 Then                          ' Удаление символов второй строки из   

   cur = Right(s1, k - j)                    первой               

   k = k - 1

   s1 = Left(s1, j - 1) + cur

  End If

 Next j

Next i

MsgBox ("Итоговая строка: " + s1)     ' Вывод результатов

End Sub

 

Private Sub CommandButton2_Click()

uf.Hide

End Sub