Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Деление строки не несколько строк, указанной длины

Delphi , Синтаксис , Текст и Строки

Деление строки не несколько строк, указанной длины

Автор: Сергей
WEB-сайт: http://delphibase.endimus.com

{ **** 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 then
  begin
    St1 := aStr;
    Exit
  end;
  Pos := Long1;
  for i := 1 to Long1 + 1 do
    if aStr[i] = ' ' then
      Pos := i;
  St1 := TrimRight(Copy(aStr, 1, Pos));
  Delete(aStr, 1, Pos);
  aStr := TrimLeft(aStr);
  Long := Length(aStr);
  if Long <= Long2 then
  begin
    St2 := aStr;
    Exit
  end;
  Pos := Long2;
  for i := 1 to Long2 + 1 do
    if 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: Входная строка, которая разбивается на три части.

Поток выполнения кода

  1. Код инициализирует выходные строки St1, St2 и St3 пустыми строками.
  2. Затем он обрезает входную строку aStr с помощью функции Trim.
  3. Если длина обрезанной строки меньше или равна Long1, он устанавливает St1 в целую входную строку и выходит из процедуры.
  4. В противном случае, код рассчитывает позицию Pos, где находится первый не пробельный символ в входной строке. Эта позиция используется как начало для первой части выходной строки.
  5. Затем он извлекает первую часть выходной строки, копируя символы с начала входной строки до рассчитанной позиции, и обрезает любые trailing spaces с помощью TrimRight.
  6. Он удаляет извлеченную часть из входной строки и обрезает любые leading spaces с помощью TrimLeft.
  7. Если длина полученной строки меньше или равна Long2, он устанавливает St2 в эту строку и выходит из процедуры.
  8. В противном случае, код повторяет шаги 4-6 для второй части выходной строки, используя оставшуюся часть входной строки.
  9. Наконец, если в входной строке остались символы после второй части, он извлекает третью часть, копируя символы с рассчитанной позиции до максимальной длины Long3, и обрезает любые trailing spaces с помощью TrimRight.
  10. Процедура заканчивается с выходными строками St1, St2 и St3, установленными в соответствующие значения.

Замечания

  • Код quite verbose, и есть лучшие способы достижения того же результата с использованием более компактного синтаксиса Delphi.
  • Код предполагает, что входная строка содержит только пробельные символы как разделители. Если другие символы должны быть использованы как разделители, код должен быть изменен соответствующим образом.
  • В этом коде нет механизмов обработки ошибок, поэтому он может не работать правильно, если параметры ввода недопустимы или если входная строка очень большая.

Альтернативное решение

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

procedure DivPart(аStr: string; var St1, St2, St3: string; Long1, Long2, Long3: byte);
var
  RE: TRegEx;
begin
  RE := TRegEx.Create('^(.{'+IntToStr(Long1)+',})( ){0,}(.{'+IntToStr(Long2)+',})( )*(.*)$');
  if RE.IsMatch(aStr) then begin
    St1 := RE.Group(1);
    St2 := RE.Group(2);
    St3 := RE.Group(3);
  end;
end;

В этом коде используется регулярное выражение для поиска соответствия в входной строке и извлечения трех частей. Класс TRegEx используется для создания объекта регулярного выражения, который затем используется для поиска соответствий в входной строке. Свойство Group используется для извлечения групп соответствия (то есть выходных строк).

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:26:19/0.0058510303497314/1