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() - возвращает строку со всеми удаленными по краям белыми пробелами.

 

Code:

 

unit TrimStr;

{$B-}

{

Файл: TrimStr

Автор: Bob Swart [100434,2072]

Описание: программы для удаления конечных/начальных пробелов

и левых/правых частей строк (аналог Basic-функций).

Версия: 2.0

 

LTrim() - Удаляем все пробелы в левой части строки

RTrim() - Удаляем все пробелы в правой части строки

Trim() - Удаляем все пробелы по краям строки

RightStr() - Возвращаем правую часть стоки заданной длины

LeftStr() - Возвращаем левую часть стоки заданной длины

MidStr() - Возвращаем центральную часть строки

 

}

interface

const

Space = #$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;

var

len: Byte absolute Str;

i: Integer;

begin

i := 1;

while (i <= len) and (Str[i] = Space) do

Inc(i);

LTrim := Copy(Str, i, len)

end{LTrim};

 

function RTrim(Str: string): string;

var

len: Byte absolute Str;

begin

while (Str[len] = Space) do

Dec(len);

RTrim := Str

end{RTrim};

 

function Trim(Str: string): string;

begin

Trim := LTrim(RTrim(Str))

end{Trim};

 

function RightStr(const Str: string; Size: Word): string;

var

len: Byte absolute Str;

begin

if Size > len then

Size := len;

RightStr := Copy(Str, len - Size + 1, Size)

end{RightStr};

 

function LeftStr(const Str: string; Size: Word): string;

begin

LeftStr := Copy(Str, 1, Size)

end{LeftStr};

 

function MidStr(const Str: string; Size: Word): string;

var

len: Byte absolute Str;

begin

if Size > len then

Size := len;

MidStr := Copy(Str, ((len - Size) div2) + 1, Size)

end{MidStr};

 

end.

 

// *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

 

const

BlackSpace = [#33..#126];

 

{

squish() возвращает строку со всеми белыми пробелами и с удаленными

повторяющимися апострофами.

}

 

function squish(const Search: string): string;

var

 

Index: byte;

InString: boolean;

begin

 

InString := False;

Result := '';

forIndex := 1to Length(Search) do

begin

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);

ifindex = 0then

Result := Search

else

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);

ifindex = 0then

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 <> nilthen

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)) andnot (Search[Index] in BlackSpace) do

Index := Index + 1;

Result := Copy(Search, Index, 255);

Index := Length(Result);

while (Index > 0) andnot (Result[Index] in BlackSpace) do

Index := Index - 1;

Result := Copy(Result, 1, Index);

end;

 

 

 

https://delphiworld.narod

DelphiWorld 6.0

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить