![]() |
![]() ![]() ![]() ![]() |
|
Расширенные строковые функцииDelphi , Синтаксис , Текст и Строки
LTrim() - Удаляем все пробелы в левой части строки
RTrim() - Удаляем все пробелы в правой части строки
Trim() - Удаляем все пробелы по краям строки
RightStr() - Возвращаем правую часть стоки заданной длины
LeftStr() - Возвращаем левую часть стоки заданной длины
MidStr() - Возвращаем центральную часть строки
squish() - возвращает строку со всеми белыми пробелами и с удаленными повторяющимися апострофами.
before() - возвращает часть стоки, находящейся перед первой найденной подстроки Find в строке Search.
Если Find не найдена, функция возвращает Search.
after() - возвращает часть строки, находящейся после первой найденной подстроки Find в строке Search.
Если Find не найдена, функция возвращает NULL.
RPos() - возвращает первый символ последней найденной подстроки Find в строке Search.
Если Find не найдена, функция возвращает 0. Подобна реверсированной Pos().
inside() - возвращает подстроку, вложенную между парой подстрок Front ... Back.
leftside() - возвращает левую часть "отстатка" inside() или Search.
rightside() - возвращает правую часть "остатка" inside() или Null.
trim() - возвращает строку со всеми удаленными по краям белыми пробелами.
unit TrimStr;{$B-}{Файл: TrimStrАвтор: Bob Swart [100434,2072]Описание: программы для удаления конечных/начальных пробелови левых/правых частей строк (аналог Basic-функций).Версия: 2.0 LTrim() - Удаляем все пробелы в левой части строкиRTrim() - Удаляем все пробелы в правой части строкиTrim() - Удаляем все пробелы по краям строкиRightStr() - Возвращаем правую часть стоки заданной длиныLeftStr() - Возвращаем левую часть стоки заданной длиныMidStr() - Возвращаем центральную часть строки }interfaceconstSpace = #$20; function LTrim(const Str: string): string;function RTrim(Str: string): string;function Trim(Str: string): string;function RightStr(const Str: string; Size: Word): string;function LeftStr(const Str: string; Size: Word): string;function MidStr(const Str: string; Size: Word): string; implementation function LTrim(const Str: string): string;varlen: Byte absolute Str;i: Integer;begini := 1;while (i <= len) and (Str[i] = Space) do Inc(i);LTrim := Copy(Str, i, len)end {LTrim}; function RTrim(Str: string): string;varlen: Byte absolute Str;beginwhile (Str[len] = Space) do Dec(len);RTrim := Strend {RTrim}; function Trim(Str: string): string;beginTrim := LTrim(RTrim(Str))end {Trim}; function RightStr(const Str: string; Size: Word): string;varlen: Byte absolute Str;beginif Size > len then Size := len;RightStr := Copy(Str, len - Size + 1, Size)end {RightStr}; function LeftStr(const Str: string; Size: Word): string;beginLeftStr := Copy(Str, 1, Size)end {LeftStr}; function MidStr(const Str: string; Size: Word): string;varlen: Byte absolute Str;beginif Size > len then Size := len;MidStr := Copy(Str, ((len - Size) div 2) + 1, Size)end {MidStr}; end. // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* constBlackSpace = [#33..#126]; {squish() возвращает строку со всеми белыми пробелами и с удаленнымиповторяющимися апострофами.} function squish(const Search: string): string;var Index: byte;InString: boolean;begin InString := False;Result := '';for Index := 1 to Length(Search) dobegin if InString or (Search[Index] in BlackSpace) then AppendStr(Result, Search[Index]); InString := ((Search[Index] = '''') and (Search[Index - 1] <> '\')) xor InString;end;end; {before() возвращает часть стоки, находящейся передпервой найденной подстроки Find в строке Search. ЕслиFind не найдена, функция возвращает Search.} function before(const Search, Find: string): string;var index: byte;begin index := Pos(Find, Search);if index = 0 then Result := Searchelse Result := Copy(Search, 1, index - 1);end; {after() возвращает часть строки, находящейся послепервой найденной подстроки Find в строке Search. ЕслиFind не найдена, функция возвращает NULL.} function after(const Search, Find: string): string;var index: byte;begin index := Pos(Find, Search);if index = 0 then Result := ''else Result := Copy(Search, index + Length(Find), 255);end; {RPos() возвращает первый символ последней найденнойподстроки Find в строке Search. Если Find не найдена,функция возвращает 0. Подобна реверсированной Pos().} function RPos(const Find, Search: string): byte;var FindPtr, SearchPtr, TempPtr: PChar;begin FindPtr := StrAlloc(Length(Find) + 1);SearchPtr := StrAlloc(Length(Search) + 1);StrPCopy(FindPtr, Find);StrPCopy(SearchPtr, Search);Result := 0;repeat TempPtr := StrRScan(SearchPtr, FindPtr^); if TempPtr <> nil then if (StrLComp(TempPtr, FindPtr, Length(Find)) = 0) then begin Result := TempPtr - SearchPtr + 1; TempPtr := nil; end else TempPtr := #0;until TempPtr = nil;end; {inside() возвращает подстроку, вложенную между паройподстрок Front ... Back.} function inside(const Search, Front, Back: string): string;var Index, Len: byte;begin Index := RPos(Front, before(Search, Back));Len := Pos(Back, Search);if (Index > 0) and (Len > 0) then Result := Copy(Search, Index + 1, Len - (Index + 1))else Result := '';end; { leftside() возвращает левую часть "отстатка" inside() или Search.} function leftside(const Search, Front, Back: string): string;begin Result := before(Search, Front + inside(Search, Front, Back) + Back);end; { rightside() возвращает правую часть "остатка" inside() или Null.} function rightside(const Search, Front, Back: string): string;begin Result := after(Search, Front + inside(Search, Front, Back) + Back);end; {trim() возвращает строку со всеми удаленными по краям белыми пробелами.} function trim(const Search: string): string;var Index: byte;begin Index := 1;while (Index <= Length(Search)) and not (Search[Index] in BlackSpace) do Index := Index + 1;Result := Copy(Search, Index, 255);Index := Length(Result);while (Index > 0) and not (Result[Index] in BlackSpace) do Index := Index - 1;Result := Copy(Result, 1, Index);end;Привет! Вот перевод текста на русский язык: Это модуль Delphi, который предоставляет расширенные функции для строковых операций, таких как trimming, извлечение частей строки и поиск подстрок. Модуль содержит несколько функций:
Модуль хорошо структурирован, с четкими комментариями, объясняющими, что делает каждая функция. Код в основном прямолинейный, но есть некоторые потенциальные проблемы:
Вот предложенный альтернативный вариант реализации для функции Эта реализация использует функцию Для других функций рекомендуется добавить более robust ошибку обработки и поддержку Unicode. Статья описывает расширенные строковые функции для языка Delphi, включая функции удаления пробелов, нахождения подстрок и работы с ними. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Текст и Строки ::
|
||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||||