{ **** UBPFD *********** by delphibase.endimus.com ****
>> Делит строку аStr на три строки St1,St2,St3 длиной Long1,Long2,Long3
Делит строку аStr на три строки St1,St2,St3 длиной Long1,Long2,Long3
соответственно или меньше в зависимости от длины исходной строки.
Зависимости: ???
Автор: Сергей, nfkazak@inbox.ru, Краснодар
Copyright: VIP BANK
Дата: 11 сентября 2002 г.
***************************************************** }procedure DivPart(aStr: string; var St1, St2, St3: string; Long1, Long2, Long3:
byte);
var
i, pos, Long: byte;
begin
St1 := '';
St2 := '';
St3 := '';
aStr := Trim(aStr);
Long := Length(aStr);
if Long <= Long1 thenbegin
St1 := aStr;
Exit
end;
Pos := Long1;
for i := 1 to Long1 + 1 doif aStr[i] = ' ' then
Pos := i;
St1 := TrimRight(Copy(aStr, 1, Pos));
Delete(aStr, 1, Pos);
aStr := TrimLeft(aStr);
Long := Length(aStr);
if Long <= Long2 thenbegin
St2 := aStr;
Exit
end;
Pos := Long2;
for i := 1 to Long2 + 1 doif aStr[i] = ' ' then
Pos := i;
St2 := TrimRight(Copy(aStr, 1, Pos));
St3 := Trim(Copy(aStr, Pos + 1, Long3))
end;
Перевод текста на русский язык:
Код Delphi, который разбивает строку на три части заданных длин.
Функции и переменные
DivPart: Главная процедура, которая принимает шесть параметров: aStr (входная строка), St1, St2 и St3 (выходные строки) и Long1, Long2 и Long3 (целочисленные значения,specifying длины выходных строк).
i, pos и Long: локальные переменные, используемые для итерации и расчета позиций в входной строке.
aStr: Входная строка, которая разбивается на три части.
Поток выполнения кода
Код инициализирует выходные строки St1, St2 и St3 пустыми строками.
Затем он обрезает входную строку aStr с помощью функции Trim.
Если длина обрезанной строки меньше или равна Long1, он устанавливает St1 в целую входную строку и выходит из процедуры.
В противном случае, код рассчитывает позицию Pos, где находится первый не пробельный символ в входной строке. Эта позиция используется как начало для первой части выходной строки.
Затем он извлекает первую часть выходной строки, копируя символы с начала входной строки до рассчитанной позиции, и обрезает любые trailing spaces с помощью TrimRight.
Он удаляет извлеченную часть из входной строки и обрезает любые leading spaces с помощью TrimLeft.
Если длина полученной строки меньше или равна Long2, он устанавливает St2 в эту строку и выходит из процедуры.
В противном случае, код повторяет шаги 4-6 для второй части выходной строки, используя оставшуюся часть входной строки.
Наконец, если в входной строке остались символы после второй части, он извлекает третью часть, копируя символы с рассчитанной позиции до максимальной длины Long3, и обрезает любые trailing spaces с помощью TrimRight.
Процедура заканчивается с выходными строками St1, St2 и St3, установленными в соответствующие значения.
Замечания
Код quite verbose, и есть лучшие способы достижения того же результата с использованием более компактного синтаксиса Delphi.
Код предполагает, что входная строка содержит только пробельные символы как разделители. Если другие символы должны быть использованы как разделители, код должен быть изменен соответствующим образом.
В этом коде нет механизмов обработки ошибок, поэтому он может не работать правильно, если параметры ввода недопустимы или если входная строка очень большая.
Альтернативное решение
Вот более компактный вариант кода с использованием регулярных выражений:
В этом коде используется регулярное выражение для поиска соответствия в входной строке и извлечения трех частей. Класс TRegEx используется для создания объекта регулярного выражения, который затем используется для поиска соответствий в входной строке. Свойство Group используется для извлечения групп соответствия (то есть выходных строк).
Проверяется и деляется строка на три части столько раз, сколько необходимо для достижения указанных длинных.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.