9. Обработка строк Строка – это некоторый набор символов, в том числе и пустой. Для обозначения строки используются кавычки ("). Пустая строка обозначается парой кавычек, между которыми нет ни одного символа, в том числе и пробела (s ="").
Строки описываются с помощью типа String. Каждая строка может содержать до двух миллиардов символов в формате Unicode. Объем памяти, занимаемой строковой переменной, зависит от количества символов в этой строке. Чем больше символов, тем больше памяти требуется для хранения этой строки.
Число символов в строке называется длиной строки. Длина пустой строки равна нулю. Все символы в строке последовательно пронумерованы. Нумерация идет слева направо и начинается с единицы. Номер символа в строке также называют позицией символа.
Подстрока – это любой фрагмент строки, состоящий хотя бы из одного символа исходной строки. Например, в строке "электростанция" содержится подстрока "рост". Левой подстрокой называется такая подстрока, которая начинается с первого символа исходной строки. В нашем случае левой подстрокой будет "элек". Правая подстрока – это подстрока, которая заканчивается последним символом исходной строки. В нашем примере это будет подстрока "станция".
Конкатенацией двух строк s1 и s2 называется строка s, для которой s1 является левой подстрокой, s2 – правой подстрокой, а длина строки s равна сумме длин строк s1 и s2. Часто конкатенацию называют сложением или склейкой строк. В Visual Basic 2005 она обозначается знаком плюс.
s = s1 + s2 6
Строковое выражение – это либо отдельная строка, либо строка и строковое выражение, между которыми стоит знак конкатенации.
9.1. Основные функции обработки строк Strings.Len(Строка) – возвращает количество символов в строке, то есть ее длину. Например, Strings.Len("Окно") вернет значение 4.
Strings.Left(Строка, Длина) – выделяет левую подстроку указанной Длины из заданной Строки. Например, Strings.Left("Пароход", 3) вернет строку "Пар".
Strings.Right(Строка, Длина) – выделяет правую подстроку указанной Длины из заданной Строки. Например, Strings.Right("Пароход", 3) вернет строку "ход".
Strings.Mid(Строка, Позиция, Длина) – выделяет подстроку заданной Длины из исходной Строки, начиная с указанной Позиции. Например, Strings.Mid("Пароход", 2, 4) вернет строку "арох". Параметр Длина может отсутствовать. В этом случае функция Strings.Mid возвращает правую подстроку, которая начинается с заданной Позиции. Например, Strings.Mid("Пароход", 4) вернет строку "оход". Функция Mid может стоять не только справа от знака присваивания, но и слева. В этом случае префикс Strings не ставится. Если функция Mid стоит слева от знака присваивания, то соответствующая подстрока исходной Строки будет заменена на значение строкового выражения, стоящего в правой части оператора присваивания. При этом длина исходной строки не меняется. Примеры:
s = "Иванов"
Mid(s, 1, 4) = "Петр"
После выполнения оператора присваивания в переменную s будет записано "Петров". То есть первые четыре символа исходной строки будут заменены на четыре символа из другой строки.
s = "Иванов"
Mid(s, 1, 4) = "Пят"
После выполнения оператора присваивания в переменную s будет записано "Пятнов". Так как во второй строке всего три символа, то в исходной строке будут изменены только первые три символа, а четвертый останется неизменным.
s = "Иванов"
Mid(s, 1, 3) = "Александр"
После выполнения оператора присваивания в переменную s будет записано "Аленов". Первые три символа исходной строки меняются на первые три символа второй строки. Остальная часть второй строки в преобразовании не участвует.
Другой пример использования функции Strings.Mid для посимвольной обработки строки рассмотрен в разделе 9.3.
Strings.InStr(Старт, Строка, Подстрока) – ищет Подстроку в Строке, начиная с указанной стартовой позиции. Стартовую позицию можно не указывать, тогда процесс поиска начинается с первого символа строки. При этом функция записывается в следующем виде: Strings.InStr(Строка, Подстрока). Не зависимо от формы записи результатом функции является число, которое показывает, с какой позиции начинается искомая подстрока. Символы строки нумеруются, начиная с единицы. Если искомая Подстрока не найдена, то функция возвращает ноль. Рассмотрим примеры.
Strings.InStr("абракадабра", "бра") даст результат 2, так как первый раз подстрока "бра" начинается со второго символа строки.
Strings.InStr(4, "абракадабра", "бра") даст результат 9, так как поиск начнется с четвертого символа строки и будет найден второй слог "бра", который начинается с девятого символа строки.
Strings.InStr("абракадабра", "кот") даст результат 0, так как подстрока "кот" в слове "абракадабра" не встречается.
Strings.InStrRev(Строка, Подстрока, Старт) тоже ищет Подстроку в Строке, начиная с указанной стартовой позиции, но поиск идет справа налево, от конца строки к началу. Стартовая позиция отсчитывается от левого края строки. Результатом работы функции будет номер позиции, с которой начинается искомая подстрока. Этот номер тоже отсчитывается от левого края строки. Рассмотрим примеры.
Strings.InStrRev("абракадабра", "бра") даст результат 9, так как последнее вхождение подстроки "бра" начинается с девятого символа строки.
Strings.InStrRev("абракадабра", "бра", 7) даст результат 2, так как поиск начнется с седьмого символа строки и пойдет к началу строки. Поэтому будет найден слог "бра", стоящий в начале строки.
Strings.StrReverse(Строка) – записывает все символы строки в обратном порядке. Например, Strings.StrReverse("книга") вернет "агинк".
Strings.Replace(Строка, Найти, Заменить, Старт, Количество, Метод сравнения) – в заданной Строке функция ищет подстроку Найти и заменяет ее на подстроку Заменить. Поиск начинается с указанной стартовой позиции и выполняется не более чем требуемое Количество замен. Если стартовая позиция не указана, то поиск начинается с первого символа исходной строки. Если же стартовая позиция указана и отличается от единицы, то предшествующая ей часть строки будет удалена. Если не указано требуемое Количество замен, то будут выполнены все возможные замены. Метод сравнения определяет режим сравнения исходной Строки и подстроки Найти. Этот параметр может иметь одно из двух значений: CompareMethod.Bynary и CompareMNethod.Text. В первом случае строки сравниваются с учетом регистра, когда строчная и прописная буквы считаются разными. Этот режим выбирается по умолчанию. То есть если при вызове функции Метод сравнения не указан, то сравнение будет происходить с учетом регистра. Во втором случае строки сравниваются без учета регистра, при этом Visual Basic 2005 не делает различия между строчными и прописными буквами. Примеры.
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр") даст результат "Петров Петр Петрович".
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр", 1, 2) даст результат "Петров Петр Иванович".
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр", 8, 1) даст результат "Петр Иванович".
Strings.UCase(Строка) – преобразует все строчные буквы исходной Строки в прописные.
Strings.LCase(Строка) – преобразует все прописные буквы исходной Строки в строчные. Примеры.
Strings.UCase("Visual Basic") даст результат "VISUAL BASIC".
Strings.LCase("Visual Basic") даст результат "visual basic".
Strings.StrConv(Строка, Режим преобразования) – преобразует строчные и прописные буквы в исходной Строке. При этом может использоваться один их трех основных Режимов преобразования.
vbStrConv.LowerCase – все буквы преобразуются в строчные (аналог функции Strings.LCase).
vbStrConv.UpperCase – все буквы преобразуются в прописные (аналог функции Strings.UCase).
vbStrConv.ProperCase – первая буква каждого слова будет прописной, а остальные – строчными.
Strings.LTrim(Строка) – удаляет все пробелы, стоящие в начале Строки, до первого символа, который не является пробелом.
Strings.RTrim(Строка) – удаляет все пробелы, стоящие в конце Строки, до ближайшего символа, который не является пробелом.
Strings.Trim(Строка) – удаляет все пробелы, стоящие в начале и в конце Строки. Пробелы, стоящие в середине Строки, остаются без изменений.
Strings.Space(Количество) – формирует строку, состоящую из заданного Количества пробелов.
Strings.StrDup(Количество, Символ) – формирует строку, состоящую из заданного Количества повторений указанного Символа.
Strings.LSet(Строка, Длина) – формирует строку указанной Длины. Если исходная Строка длиннее, чем требуется, то ее правая часть теряется. Если исходная Строка короче, чем требуется, то она будет дополнена справа необходимым количеством пробелов. Другими словами, происходит выравнивание строки по левой границе.
Strings.RSet(Строка, Длина) – формирует строку указанной Длины. Если исходная Строка длиннее, чем требуется, то ее правая часть теряется. Если исходная Строка короче, чем требуется, то она будет дополнена слева необходимым количеством пробелов. Другими словами, происходит выравнивание строки по правой границе.
Strings.StrComp(Строка1, Строка2, Режим сравнения) – сравнивает две строки и возвращает один из трех результатов: 1 (если Строка1 больше, чем Строка2), 0 (если строки равны) или -1 (если Строка1 меньше, чем Строка2). Режим сравнения определяет способ сравнения строк. Этот параметр может иметь одно из двух значений: CompareMethod.Bynary и CompareMNethod.Text. В первом случае строки сравниваются с учетом регистра, когда строчная и прописная буквы считаются разными. Этот режим выбирается по умолчанию. Во втором случае строки сравниваются без учета регистра, при этом Visual Basic 2005 не делает различия между строчными и прописными буквами. Правила сравнения двух строк будут подробно рассмотрены в разделе 9.7.
Val(Строка) – функция пытается преобразовать указанную строку в число. Преобразование прерывается при первой же ошибке. Если исходная Строка начинается не с цифры, а с символа, то функция возвращает значение 0. Примеры различных преобразований приведены в таблице 12.
Таблица 12
Исходная строка
| Результат функции Val
| "12"
| 12
| "12а"
| 12
| "1а2"
| 1
| "а12"
| 0
| "аб"
| 0
| "0"
| 0
|
Str(Число) – преобразует число в строку. Перед положительными числами функция ставит один пробел.
Strings.Asc(Строка) – возвращает ASCII7 код первого символа Строки.
Strings.Chr(Код) – возвращает символ, соответствующий заданному ASCII коду.
Strings.Split(Строка, Разделитель, Количество) – формирует массив из слов, содержащихся в Строке. Каждое слово записывается в отдельный элемент массива. Признаком конца очередного слова является появление в строке подстроки Разделитель. Если Разделитель не указан, то признаком конца слова является пробел. Результирующий массив следует описывать как массив с неизвестной верхней границей. Нумерация слов в массиве идет с нуля. Если параметр Количество не указан, то каждое слово будет записано в отдельный элемент массива. Если же Количество задано, то результирующий массив будет состоять не более чем из требуемого Количества элементов. Если в строке содержится больше слов, чем указано в параметре Количество, то в последнем элементе массива в виде одного «слова» будет храниться вся необработанная часть строки. Если в строке идут два разделителя подряд, например, два пробела, то в массив слов вставляется пустое слово, и соответствующий элемент массива будет содержать пустую строку. Пример использования функции Strings.Split рассмотрен в разделе 9.3.
Strings.Join(Массив слов, Разделитель) – формирует строку из Массива слов, разделяя слова с помощью указанной строки – Разделителя. Если Разделитель не указан, то слова разделяются одним пробелом. За последним словом массива Разделитель не ставится. Пример использования функции Strings.Join рассмотрен в разделе 9.4.
|