Поиск строки со знаком в делфи

AnsiPos - Функция. Справочник - Основы Delphi

поиск строки со знаком в делфи

В данном случае по краям слова добавлен знак минуса). Я пересмотрел много примеров, и ни один из них не справился с этой задачей. (Может я плохо. В последних версиях Delphi тип string, обозначающий строку, .. Writeln(Pos(' строка', 'Первая строка, вторая строка', 1)); //Поиск с. Здравствуйте &reY, Вы писали: &Y>Здравствуйте Аноним, Вы писали: А>> Трабл: Забыл как обозначается символ конца строки в Pascal.

Типы данных Перейдём непосредственно к программированию. Для работы с символами и строками существуют соответствующие типы данных: Char - один символ то есть 1 байт ; String - строка символов, текст N байт. Официально строки вмещают лишь символов, однако в Delphi в строку можно записать гораздо.

Для хранения больших текстов и текстов со специальными символами существуют специальные типы данных AnsiString и WideString последний, кстати, двухбайтовый, то есть для Юникода. Для задания текстовых значений в Pascal используются одинарные кавычки не двойные! Если вы хотите жёстко ограничить длину текста, хранимого в строковой переменной, можно сделать это следующим образом: Операции со строками Основной операцией со строками является сложение.

Подобно числам, строки можно складывать. И если в числах стулья с апельсинами складывать нельзя, то в строках -. Сложение строк - это просто их объединение. В Pascal нумерация символов в строках начинается с 1.

  • Поиск подстроки в строке
  • Работа со строками в Delphi 10.1 Berlin
  • Обучающий курс. 18. Работа со строками и символами

Порядковый номер символа в строке придуман не случайно, ведь именно по этим номерам, индексам, осуществляются действия над строками. Получить любой символ из строки можно указанием его номера в квадратных скобках рядом с именем переменной. Отсюда следует и форма обращения к отдельным символам. Обработка строк Перейдём к функциям и процедурам обработки строк. Длина строки Длину строки можно узнать с помощью функции Length. Функция принимает единственный параметр - строку, а возвращает её длину.

Определить, начиная с какой позиции в неё входит строка S2. Без выполнения этой операции ни одну обработку представить невозможно. Итак, для такого нахождения существует функция Pos. Функция принимает два параметра: Поиск осуществляется с учётом регистра символов.

Работа со строками и символами

Если функция нашла вхождение подстроки в строку, возвращается номер позиции её первого вхождения. Если вхождение не найдено, функция даёт результат 0. How do you do? Следует обратить внимание, что это именно процедура, а не функция - она производит действия непосредственно над той переменной, которая ей передана.

Итак, первый параметр - переменная строкового типа, из которой удаляется фрагмент именно переменная! Поэтому, если нужно удалить фрагмент из строки с какого-то символа до конца, не нужно вычислять количество этих символов. Лучшим способом будет задать длину самой этой строки. Допустим, требуется найти в строке первую букву " a " и удалить следующую за ней часть строки. Первая буква " a " в строке стоит на позиции 9.

Длина всей строки - 15 символов. Значит вызов функции происходит такой: Видно, что от буквы " a " до конца строки всего 7 символов Но функция сделает своё дело, не смотря на эту разницу.

Работа со строками Delphi. Pos, Copy, Delete, StringReplace

Результатом, конечно, будет строка " This is ". Данный пример одновременно показал и комбинирование нескольких функций. Копирование извлечение части строки Ещё одной важной задачей является копирование части строки. Например, извлечение из текста отдельных слов. Выделить фрагмент строки можно удалением лишних частей, но этот способ неудобен. Функция Copy позволяет скопировать из строки указанную часть.

Функция принимает 3 параметра: Результатом работы функции и будет фрагмент строки. На форме разместим Edit1 TEditв который будет введено предложение. Операцию будет выполнять по нажатию на кнопку. TObject ; var s,word: Число символов берётся на единицу меньше, так как в противном случае пробел также будет скопирован. Пример "посерьёзнее" Примеры, приведённые выше, лишь демонстрируют принцип работы со строками с помощью функций LengthPosDelete и Copy.

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

поиск строки со знаком в делфи

Во-первых, вы сразу должны догадаться, что нужно использовать циклы. Без них никак, ведь мы не знаем, какой текст будет передан программе для обработки. Во-вторых, слова отделяются разными символами - это создаёт дополнительные трудности. Что ж, пойдём по порядку. Сначала перенесём введённый текст в переменную. Для того, чтобы разом взять весь текст из Memo, обратимся к свойству Lines. TObject ; var Text: Text; end; Теперь перейдём к обработке. Первое, что нужно сделать - разобраться с символами-разделителями.

Дело в том, что такие символы могут запросто идти подряд, ведь после запятых, точек и других знаков ставится пробел. Обойти эту трудность можно таким простым способом: Для этого пройдём все символы и сделаем необходимые замены. Чтобы определить, является ли символ разделителем, запишем все разделители в отдельную строковую переменную константуа затем будем искать в этой строке каждый символ функцией Pos.

Все эти замены будут производиться в переменной, чтобы оригинальный текст в Memo то есть на экране не был затронут. Тем не менее, для проверки промежуточных результатов работы имеет смысл выводить обработанный текст куда-либо. Например, в другое поле Memo.

поиск строки со знаком в делфи

Чтобы пройти все символы, воспользуемся циклом FORгде переменная пройдёт порядковые номера всех символов, то есть от 1 до длины строки текста: Во-первых, первый символ не должен быть разделителем, то есть если первый символ - запятая, его нужно удалить. Далее, если подряд идут несколько запятых, их нужно заменить на одну. И наконец, чтобы корректно обработать весь текст, последним символом должна быть запятая. Ну вот, теперь в тексте не осталось ничего лишнего - только слова, разделённые запятыми.

Сначала добьёмся того, чтобы программа извлекла из текста первое слово. Для этого найдём первую запятую, скопируем слово от начала текста до этой запятой, после чего удалим это слово из текста вместе с запятой. Удаление делается для того, чтобы далее можно было, проделав ту же самую операцию, вырезать следующее слово.

Вырезанное слово теперь добавляем в ListBoxвызывая ListBox. Теперь нам нужно организовать такой цикл, который позволил бы вырезать из текста все слова, а не только первое. За исключением одного момента - в ListBox в конце появились какие-то пустые строки Об этом вы узнаете в следующем разделе урока, а пока давайте реализуем требуемое до конца.

Количество слов в тексте определить очень просто - не нужно заново ничего писать. Count ; Теперь нужно найти самое длинное из всех слов. Алгоритм нахождения максимального числа таков: Затем проверяем все остальные числа таким образом: В нашем случае нужно искать максимальную длину слова.

Для этого можно добавить код в цикл вырезания слов из текста или произвести поиск после добавления всех слов в ListBox. Следует отметить, что строки нумеруются с нуля, а не с единицы! В отдельной переменной будем хранить самое длинное слово.

Мастера DELPHI | Поиск и фильтрация данных в Delphi (документация, исходники, скачать)

Казалось бы, нужно ведь ещё хранить максимальную длину слова, чтобы было с чем сравнивать Но не нужно заводить для этого отдельную переменную, ведь мы всегда можем узнать длину слова функцией Length. Итак, предположим, что первое слово самое длинное Count-1 do if Length ListBox1.

Именно поэтому мы присваиваем результат обратно в переменную.

поиск строки со знаком в делфи

Процедура Delete работает по-другому: Копирование части строки Здесь идёт речь о том, что часть длиной строки нужно скопировать в новую строку или массив символов.

Есть также функция MidStr в юните System. StrUtils, которая работает аналогично функции Copy, поэтому в примере её не.

поиск строки со знаком в делфи

CopyTo 2, arr6, 0, 3 ; finally stringBuilder. Первые два способа копируют часть строки слева функция LeftStr или справа RightStr. Остальные четыре способа подходят, как для копирования части строки слева или справа, так и из середины.

Работа со строками Delphi

Обратите внимание, что в функциях Copy и MidStr нумерация символов начинается с 1, а во всех остальных с 0. Исходная строка или массив символов во всех четырёх способах не меняется. Но кроме этого существуют ещё много функций: Compare умеют производить регистронезависимое сравнение строк, остальные функции и операторы - регистрозависимое.

Третьим параметром в функциях CompareText и SameText можно указать, что нужно использовать для сравнения строк пользовательскую локаль. В этом случае вы сможете сравнивать строки с русскими буквами независимо от регистра, если конечно в ОС используется русский язык. Самая продвинутая здесь функция — это TStringHelper. С помощью неё можно сравнивать не только целые строки, но и части строк. Здесь можно настроить зависимость от регистра, включить игнорирование символов и знаков препинания или сравнение цифр как чисел и.

Операторы, а также функции TStringHelper. Equals, в результате сравнения, отдадут вам True, если условие верно, и False, если условие не верно.

Они сравнивают строки с точки зрения сортировки. Функции возвращают отрицательное число, если строка, указанная в первом параметре, сортируется до строки, указанной во втором параметре, положительное число - если первая строка сортируется после второй и 0 — если строки равны.

Equals сравнивают строки на соответствие. Итак, вот примеры использования вышеперечисленных функций и операторов: Результат будет -1 то есть строка 1 сортируется до строки 2. Результат будет то есть строка 1 сортируется до строки 2. Результат будет 0 то есть строки 1 и 2 равны.

В результате будет 1 то есть строка 1 сортируется после строки 2. В результате будет 0 то есть строки 1 и 2 одинаковые. Equals stringBuilder2 ; finally stringBuilder2. Free; end; finally stringBuilder1.

Поиск подстроки в строке Теперь давайте посмотрим, как можно найти подстроку определённую последовательность символов в строке. Здесь у вас есть большой выбор функций, которые возвращают либо индекс найденной подстроки, либо true или false в зависимости от того, найдена подстрока в строке или. Итак, давайте перечислим все функции для поиска подстроки: В первую очередь — это функция Pos, которая ищет подстроку, начиная с указанного номера символа.

Функция осуществляет регистрозависимый поиск. Здесь нумерация символов начинается с 1. Если подстрока найдена, то возвращается номер первого символа найденной подстроки, иначе — 0. Есть также функция PosEx в юните System. StrUtilsкоторая работает абсолютно. Вот пример использования функции Pos: В результате отобразится 8.

В результате отобразится В результате отобразится 0. Они также осуществляют регистрозависимый поиск. Функция IndexOf ищет подстроку или символ с начала и до конца строки, а функция LasIndexOf — наоборот, то есть с конца и до начала. Если подстрока найдена, то функции возвращают индекс первого символа найденной подстроки в строке.

Здесь нумерация символов начинается с 0.

поиск строки со знаком в делфи

Если подстрока не найдена, то функции возвращают Также при поиске вы можете задать начало и интервал поиска. Вот примеры использования этих функций: В результате отобразится 7. Теперь рассмотрим функции для проверки, есть ли подстрока в строке, и не важно, в каком месте.