ТОП 10:

Функции, предназначенные для работы со строками



Решение подавляющего большинства задач на обработку строковых переменных требует владения встроенными функциями:

Функция (S- строка, X- число) Назначение
Len(S) Возвращает количество символов в строке S Fio=”Иванов”: l=Len(Fio) Результат: l=6
Left(S,k) Возвращает k символов с начала строки Fio=”Иванов”: t=Left(Fio,4) Результат: t=”Иван”
Right(S,k) Возвращает k символов с конца строки Fio=”Иванов”: T=Right(Fio,2) Результат: T=”ов”
Mid(S,Pos,k) Возвращает k символов из переменной S, начиная с позиции Pos, включительно Fio=”Иванов”: T=Mid(Fio,2,4) Результат: T=”вано” Эта функция часто используется для выдаления одного символа из строки: Mid(S,i,1)
Val(S) Преобразует строку S в десятичное число p=”-243.65”: S=Val(p)+100 Результат: S=-143.65
CInt(S) Преобразует строку S в целое число p=”-243”: S=Val(p)+100 Результат: S=-143
Str(X) Преобразует число X в строку символов с учетом знака. Если число положительное, вместо знака ставится пробел. a=123.45: b=-678: S=Str(b)+Str(a) Результат: S=”-678 123.45”
СStr(X) Преобразует числовое выражение X в строку символов. S=СStr(4-7/3) Результат: S=”4-7/3”
Chr(N) Возвращает символ, соответствующий числовому коду в таблице символов For i=65 to 90 Print Chr(i) Результат: Вывод заглавных букв латинского алфавита
Asc(S) Определяет числовой код первого символа в строке S: Print Asc(”123”): Print Asc(” 1a2m”) Print Asc(”ABC”) Результат: 49 32 65
InStr(n,S,S1) Начиная с позиции n, определяет позицию первого появления подстроки S1 в строке S. Если такой подстроки нет, то возвращаемым значением функции будет ноль. S=”кукуруза”: S1=”ку” Print Instr(1,x,y); Print Instr(2,x,y); Результат: 1 3
InStrRev(n,S,S1) Определяет позицию первого появления подстроки S1 в строке S справа налево (начиная с конца строки)
LTrim(S) Удаляет пробелы, расположенные в начале строки
RTrim(S) Удаляет пробелы, расположенные в конце строки
TRim(S) Удаляет пробелы, расположенные в начале и в конце строки
LCase(S) Изменяет регистр букв исходной строки S на нижний
UCase(x) Изменяет регистр букв исходной строки S на верхний
StrConv(S,p) Изменяет регистр букв строки S, в зависимости от значения параметра p p =1, верхний регистр; p =2, нижний регистр; p =3, только первая заглавная
StrReverce(x) Изменяет порядок следования в строке на обратный
Spase(n) Возвращает строку, состоящую из n пробелов
Replase (S,S1,S2,n,k) Заменяет в строке S подстроку S1 на подстроку S2, начиная с позиции n. k - количество замен, если значение k не указано, то заменяются все вхождения S1 в S. Эта функция используется также для удаления подстрок: s1=”121113” Print Replace(s1,”1”,””) ’Удаляется ’подстрока ”1” Результат: 23

Строку символов всегда можно преобразовать в одномерный массив отдельных символов, расщепив ее при помощи функции Mid или Split. После этого со строкой можно работать точно так же как и с одномерным массивом. После обработки массива, его элементы следует обратно слить в строку при помощи операции сцепления.

Функция Split

Функция Split используется для расщепления строки на подстроки с использованием разделителя подстрок. Возвращает эта функция одномерный массив с типом данных Variant (String), содержащий в качестве элементов найденные подстроки.

Формат обращения к функции:

Split(Исходная строка,[Разделитель])

Здесь Исходная строка – строка, которую нужно расщепить (обязательный аргумент). Если аргумент содержит нулевую строку (””), то возвращается пустой массив.

Разделитель– символы типа String, которые используются в качестве разделителя строки (необязательный аргумент). Чаще всего в качестве разделителя используются символы пробел или запятая. Если аргумент опущен, то по умолчанию используется символ пробела (””). Если аргумент содержит нулевую строку (””), то возвращается одноэлементный массив, содержащий исходную строку.

Функция Join

Функция Join выполняет обратное действие – объединяет элементы массива в строку, используя указанный разделитель.

Формат обращения к функции:

Join (Имя массива, [Разделитель])

Оператор Mid

Оператор Mid используется для модификации строк.

Формат обращения к оператору:

Mid(Исходная строка, Позиция [, Длина]) = Замена

Здесь Исходная строка – строка для модификации,

Позиция – позиция символа в исходной строке, с которой начинается замена,

Длина – число заменяемых символов,

Замена – строковое выражение для замены.

Число заменяемых символов всегда меньше или равно числу символов в исходной строке. Не следует путать этот оператор с одноименной функцией!

 

 

Типовые задачи на обработку строк

Анализ символьных строк

Пример 1. Ввести строку символов. Определить:

- количество цифр в строке;

- есть ли в строке одинаковые символы;

- вывести все гласные буквы латинского алфавита.

Фрагмент программного кода:

Option Explicit

Private Sub Command1_Click()

Dim S As String, S1 As String, a As String

Dim i As Integer, kol As Integer, n As Integer

Dim T As Boolean 'Логическая переменная

S = Text1.Text 'Ввод строки

Text2.Text = "": Text3.Text = "": Text4.Text = ""

n = Len(S) 'Длина строки

 

'Определение количества цифр в строке

kol = 0 'Инициализация счетчика для подсчета количества цифр

For i = 1 To n 'Цикл по всем символам строки для поиска цифр

a = Mid(S, i, 1)

If (a >= "0") And (a <= "9") Then kol = kol + 1

Next i

Text2.Text = Str(kol) 'Вывод количества цифр в строке

 

'Определяется, есть ли в строке одинаковые символы

T = False 'Предполагается, что одинаковых символов нет

For i = 1 To n 'Цикл для поиска одинаковых символов

'Если i-ый символ исходной строки встречается в строке еще раз, то функция IntStr 'вернет значение не равное нулю

If (InStr(1, S, Mid(S, i, 1)) <> 0) And _

(InStr(1, S, Mid(S, i, 1)) <> i) Then

T = True 'i-ый символ в подстроке есть

Exit For 'Немедленный выход из цикла, если найден хотя бы

'один одинаковый символ

EndIf

Next i

If T Then

Text3.Text = "Одинаковые символы есть"

Else

Text3.Text = "Одинаковых символов нет"

End If

'Вывод гласных латинских букв

For i = 1 To n 'Цикл для поиска гласных латинских букв

a = Mid(S, i, 1)

Select Case a

Case "A", "E", "I", "O", "U", "Y"

Text4.Text = Text4.Text + a + " "

Case "a", "e", "i", "o", "u", "y"

Text4.Text = Text4.Text + a + " "

End Select

Next i

If Text4.Text = "" Then Text4.Text = "Таких букв нет"

End Sub

Пример 2. Дан текст. Определить количество предложений и найти количество слов, начинающихся с буквы «п».

Фрагмент программного кода:

S = Text1.Text

n = Len(S)

'Подсчет количества предложений

kp=0

For i = 1 To n

a = Mid(S, i, 1) 'Выделение i-го символа

If (a=".") Or (a="?") Or (a="!") Then kp=kp+1

Next i

'Подсчет количества слов, начинающихся с буквы «п» или «П»

If (Mid(S, 1, 1)="П") Then ks=1 Else ks=0'Проверка первого слова

For i=1 To n

If (Mid(S,i,2)=" П") Or (Mid(S,i,2)=" п") Then ks=ks+1

Next i

 

Изменение строк (замена, удаление, вставка символов)

Пример 3. Получить новую строку S1 из введенной строки S, заменив строчные русские буквы на прописные.

Фрагмент программного кода:

For i = 1 To Len(S) 'Цикл по всем символам заданной строки

a = Mid(S, i, 1)

Select Case a

'Преобразование встреченной в заданной строке строчной русской буквы

'в прописную русскую букву и добавление ее в новую строку. Прописная русская буква

'в таблице ASCII имеет код меньший, чем соответствующая ей строчная, на 32.

Case "а" To "я"

S1 = S1 + Chr(Asc(a) - 32)

Case Else

S1 = S1 + a 'Добавление символа строки s в строку s1 без преобразования

End Select

Next i

 

Пример 4. Получить новую строку S1 из введенной строки S такую, чтобы между словами был только один пробел. Вывести сообщение о количестве удаленных пробелов.

Фрагмент кода программы:

Private Sub Command1_Click()

S = Text1.Text

S = Trim(S) 'Удаление пробелов вначале и в конце заданной строки

S1 = ""

For i = 1 To Len(S) - 1 'Цикл для поиска пробелов

If Mid(S, i, 1) <> " " Then

S1 = S1 + Mid(S, i, 1) 'Переписывание символов,

отличных от проделов в строку s1

Else

'Запись в строку s1 одного пробела, если следующий за ним символ не пробел

If Mid(S, i + 1, 1) <> " " Then S1 = S1 + " "

EndIf

Next i

S1 = S1 + Mid(S, Len(S), 1) 'Переписывание последнего символа

 

k = Len(S) - Len(S1) 'Подсчет количества удаленных пробелов

Text2.Text = S1

Text3.Text = Str(k)

End Sub

 

Пример 5. В заданной строке S заменить все слова «всегда» на «часто».

Фрагмент кода программы:

Private Sub Command1_Click()

s=Text1.Text

s=Replace(s, "Всегда", "Часто", 1)

s=Replace(s, "всегда", "часто", 1)

Text2.Text=s

End Sub

Пример 6. Преобразовать заданную строку S в массив слов и вывести его в поле Text.

Фрагмент кода программы:

Private Sub Command1_Click()

Dim i, k As Byte

Dim s As String

Dim m(1 To 127) As String 'Описание массива для хранения слов

s – заданная строка

s = Text1.Text

Text2.Text = ""

k = 1 'Задание начального номера элемента массива

For i = 1 To Len(s) 'Цикл для поиска пробелов

If (Mid(s, i, 1) <> " ") And (Mid(s, i, 1) <> ".") And

(Mid(s, i, 1) <> "!") And (Mid(s, i, 1) <> "?") Then

m(k) = m(k) + Mid(s, i, 1)'Формирование очередного элемента массива

Else

k = k + 1 'Увеличение номера элемента массива

End If

Next i

For i = 1 To k

Text2.Text = Text2.Text + m(i) + Chr(13) + Chr(10)

Nexti

End Sub

Файлы

В зависимости от организационной структуры хранения информации в файле и способа доступа к этой информации принято выделять три типа файлов:

1. Файлы последовательного доступа. Как правило, это текстовые файлы. Структурной единицей таких файлов является строка. Данные в них хранятся в виде цепочки ASCII кодов и могут обрабатываться любым текстовым редактором. Запись и считывание данных при работе с такими файлами происходит строго последовательно (нельзя получить доступ ко второй записи, не прочитав первой).

2. Файлы произвольного доступа. Это структурированные файлы, которые содержат информацию в виде записей. Например, файлы баз данных. Компоненты (поля) в записях таких файлов могут иметь разные типы. Но все записи файлов последовательного доступа имеют постоянную длину и порядковый номер. Это позволяет получить доступ сразу к нужной записи без последовательного просмотра всех предыдущих.

3. Бинарные (двоичные) файлы. Это могут быть файлы последовательного доступа, но информация в них представлена в виде байтов или блоков байтов. К таким файлам можно отнести файлы с расширением exe, т.е. программные. Это могут быть файлы произвольного доступа: размер записи у них всегда равен 1 байту, и любой байт можно считать по его порядковому номеру.







Последнее изменение этой страницы: 2016-08-12; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.137.159 (0.018 с.)