Code:

function LoCaseRus( ch : Char ) : Char;

{Перевод символа в нижний регистр для русского алфавита}

asm

CMP AL,'A'

JB @@exit

CMP AL,'Z'

JA @@Rus

ADD AL,'a' - 'A'

RET

@@Rus:

CMP AL,'Я'

JA @@Exit

CMP AL,'А'

JB @@yo

ADD AL,'я' - 'Я'

RET

@@yo:

CMP AL,'?'

JNE @@exit

MOV AL,'?'

@@exit:

end;

Code:

{ **** UBPFD *********** by delphibase.endimus ****

>> Повтор строки заданное количество раз

 

Input - строка для повторения

Rep - количество повторений

 

Строка на выходе это входная строка повторенная Rep раз.

 

Зависимости: Стандартные модули

Автор: Ru, DiVo_Ru @ rambler.ru, Одесса

Copyright: DiVo 2002 creator Ru (по мотивам функции Str из Word Basic)

***************************************************** }

 

function MulStr(Input: string; Rep: integer): string;

var

i: integer;

begin

for i := 0to Rep - 1do

result := result + Input;

end;

Пример использования:

 

s1 := 'Привет';

s := MulStr(s1, 3);

 

// результат:

s := 'ПриветПриветПривет';

Code:

{ **** UBPFD *********** by delphibas e.endimus .com ****

>> Удаление пробелов в начале строки

 

Функция возвращает строку без пробелов в начале (если они были)

 

Зависимости: Windows, SysUtils

Автор: Hastlero

Copyright: HasTler0

***************************************************** }

 

var

i: Integer;

begin

if Length(str) = 0then

begin

DelSpaces := str;

Exit;

end;

for i := 1to length(str) do

begin

if pos(' ', str) = 1then

delete(str, 1, 1)

else

begin

DelSpaces := str;

Break;

end;

end;

end;

//Пример использования:

 

Str := DelSpaces(Str);

Изобретателям велосипеда посвящается:

 

TrimRight - удаляет пробелы в начале строки, в том числе и в юникодных строках

TrimLeft - удаляет пробелы в конце строки, в том числе и в юникодных строках

Trim - удаляет пробелы в начале и в коце строки, в том числе и в юникодных строках

Code:

{ **** UBPFD *********** by delphibase.endimus****

>> Примеры форматирования строк с использованием API-функции wvsprintf

 

Примеры показывают приемы использования функции wvsprintf в Delphi для

форматирования строк. Эта функция входит в состав Windows API

(реализована в user32.dll), поэтому не требует подключения модуля

SysUtils по сравнению с аналогичной функцией Format.

 

Зависимости: Windows

Автор: Внук, Zhigalin @ poria.ru, ICQ:60571446, Самара

Copyright: Внук

 

***************************************************** }

 

// Пример использования функции wvsprintf с двумя параметрами разного типа

 

function WinFormat(out TargetString: AnsiString): Boolean;

const

FormatStr = 'String Parameter:"%s", Number Parameter:%05d';

var

StrParam: AnsiString;

NumberParam, FormatResult: Integer;

ParamArray: array[0..1] of Pointer;

begin

NumberParam := 105; // Задаем значение первого параметра

StrParam := 'Hello'; // Задаем значение второго параметра

SetLength(TargetString, 50); // Должно быть достаточно места для результата.

// Без этой строки работать не будет

ParamArray[0] := @StrParam[1];

ParamArray[1] := Pointer(NumberParam);

FormatResult := wvsprintf(PChar(TargetString), FormatStr, PChar(@ParamArray));

if FormatResult < Length(FormatStr) then// В случае ошибки значение функции

// меньше длины шаблонной строки

begin

TargetString := '';

Result := False;

end

else

result := True;

end;

 

// Пример использования функции wvsprintf с одним параметром

 

function SimpleWinFormat(out TargetString: AnsiString): Boolean;

const

FormatStr = 'Number Parameter:%05d';

var

NumberParam, FormatResult: Integer;

begin

NumberParam := 112;

SetLength(TargetString, 50); // Должно быть достаточно места для результата.

// Без этой строки работать не будет

FormatResult := wvsprintf(PChar(TargetString), FormatStr,

PChar(@NumberParam));

if FormatResult < Length(FormatStr) then// В случае ошибки значение функции

// меньше длины шаблонной строки

begin

TargetString := '';

Result := False;

end

else

result := True;

end;

Пример использования:

 

uses Dialogs, ...;

...

var

S: AnsiString;

...

begin

...

if WinFormat(S) then

ShowMessage(S)

else

ShowMessage('An error has been occured!');

if SimpleWinFormat(S) then

ShowMessage(S)

else

ShowMessage('An error has been occured!');

...

end;

...

Code:

{ **** UBPFD *********** by delphibase .endimus. com ****

>> Форматирование строки с использованием подстановочных символов %1, %2 и т.д.

 

Функция заменяет в строке Str все подстроки '%1', '%2', и т.д. На

соответсвующие значения из массива Values. При этом значения этого массива

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

зависание функции.

 

Зависимости: SysUtils

Автор: Dimka Maslov, mainbox @ endimus.ru, ICQ:148442121, Санкт-Петербург

Copyright: Dimka Maslov

***************************************************** }

 

{Эта функция работает неверно, если в строке, на которую надо

заменить %1,%2,… содержится одна из строк %1,%2,…

( она зависнет в бесконечном цикле )}

 

function FmtString(const Str: string; const Values: arrayofstring): string;

 

function InternalPos(SubStr: string; Str: PChar; out P: Integer): Integer;

var

Ptr: PChar;

begin

Ptr := StrPos(Str, PChar(SubStr));

if Ptr = nilthen

Result := -1

else

Result := Integer(Ptr) - Integer(Str);

P := Result;

end;

 

function InternalReplace(const Str, OldSub, NewSub: string): string;

var

PrePos: Integer;

CurPos: Integer;

OldLen, NewLen: Integer;

begin

PrePos := 1;

Result := Str;

OldLen := Length(OldSub);

NewLen := Length(NewSub);

while InternalPos(OldSub, @Result[PrePos], CurPos) >= 0do

begin

Inc(PrePos, CurPos);

Delete(Result, PrePos, OldLen);

Insert(NewSub, Result, PrePos);

Inc(PrePos, NewLen);

end;

end;

 

var

i: Integer;

begin

Result := Str;

for i := High(Values) downto Low(Values) do

Result := InternalReplace(Result, '%' + IntToStr(i + 1), Values[i]);

end;

Пример использования:

 

FmtString('%1 %2', ['Пример', 'использования']);

 

Code:

{ **** UBPFD *********** by delphibase.endimus ****

>> удаление лишних пробелов в строке

 

удаляет из строки лишние пробелы без использования всяких указателей и т.д.

 

Зависимости: стандартные модули

Автор: Артем, boss1999 @ mail.ru, москва

Copyright: собственное описание (Артем)

 

***************************************************** }

 

{процедура удаления лишних пробелов в строке (см. function Sha_SpaceCompress)}

var

c, i: integer;

stt, st, st1: string;

begin

c := 0;

st := edit1.Text;

 

for i := 1to Length(st) do

begin

 

stt := copy(st, i, 1);

if (stt = ' ') and (c >= 1) then

begin

st1 := st1;

c := c + 1;

end

elseif (stt = ' ') and (c = 0) then

begin

c := c + 1;

st1 := st1 + stt;

end

elseif (stt <> ' ') then

begin

c := 0;

st1 := st1 + stt;

end

end;

 

edit2.text := st1;

end;

 


Code:

Function DeleteUselessSpaces(s:String):string;

{©Drkb v.3(2007): www. drkb .ru, 

®Vit (Vitaly Nevzorov) - nevzorov @ yahoo.com}

begin

Repeat

Result:=s;

s:=StringReplace(Result,' ',' ',[rfReplaceAll]); //заменяем все двойные пробелы на одинарные

Until Result=s; //повторяем до тех пор пока есть двойные пробелы

end;

 

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

 

В Delphi существует группа функций форматирования строк. Их рассмотрение начнем с наиболее часто встречающегося представителя — функции Format:

 

Code:

function Format (const Format: string; const Args: arrayofconst) : string;

 

Первым параметром функции выступает форматирующая строка. Это — обычная текстовая строка, но в ней на нужных местах стоят специальные символы, которые определяют, какие и как туда будут подставлены параметры.

 

Второй параметр функции Format называется списком аргументов. Он и содержит "вставляемые" в форматирующую строку параметры. Обратите внимение, что этот открытый массив имеет тип array of const. и в нем может передаваться переменное число разнотипных параметров. Например, после выполнения

 

Code:

S := Format('Product %s , version %d.%d', [ 'Borland Delphi' , 1, 0]);

 

строке S будет присвоено: Product Borland Delphi , version 1.0. Рассмотрим подробнее правила, по которьм составляется форматирующая строка.

 

"Специальные" места в ней называются спецификаторами формата и представляют собой следующие конструкции

 

"%" [index":"] ["-"I [width] ["."prec] type

где обозначены:

• символ -%", с которого начинаются все спецификаторы формата (обязательный);

• поле индекса аргумента [ index " : " ] (необязательное);

• признак выравнивания по левому краю ["-"I (необязательный);

• поле ширины [width] (необязательное);

• поле точности [ - . - prec ] (необязательное);

• символ типа преобразования type (обязательный).

 

Каждый спецификатор формата соответствует как минимум одному из элементов списка аргументов и определяет, как именно рассматривать его и преобразовывать в строку.

Функция Format поддерживает следующие символы типа преобразования:

 

d Десятичный Элемент должен быть целым числом и преобразуется в строку десятичных цифр. Если при символе есть поле точности, то в выходной строке будет минимум ргес цифр; если при преобразовании числа их потребуется меньше, то строка дополняется слева нулями.

 

х Шестнадцатиричный Как тип d, но элемент преобразуется в строку шестнадцатиричных цифр.

 

е Научный Элемент должен быть числом с плавающей точкой. Он преобразуется к нормализованному виду -d.dddE+ddd. Перед десятичной точкой всегда находится одна цифра (при необходимости, с минусом). После символа "Е" идет показатель степени, имеющий знак и состоящий не менее чем из 3 цифр. Общее число символов в представлении числа определяется полем ргес (по умолчанию 15).

 

f Фиксированный Элемент должен быть числом с плавающей точкой. Он преобразуется к виду -ddd.ddd. Поле ргес означает количество цифр после десятичной точки (по умолчанию 2).

 

l Обобщенный Элемент должен быть числом с плавающей точкой. Он преобразуется к одному из двух вышеперечисленных видов — выбирается тот, который обеспечивает более короткую запись. Если требуемое число цифр слева от десятичной точки меньше значения поля ширины и само число больше 10" , применяется фиксированный тип. Удаляются все впереди идущие нули, десятичная точка (при возможности), а также символы, разделяющие строку на группы по три цифры.

 

п m Числовой Денежный Совпадает с типом f за исключением того, что после каждой группы из трех цифр ставятся разделительные символы: d,ddd, ddd.ddd.... Элемент должен быть числом с плавающей точкой, отражающей денежную сумму. Способ ее представления зависит от значений глобальных констант, определенных в модуле SYSUTILS (см. ниже). В свою очередь, они зависят от настройки Windows на обозначения, принятые в данной стране.

 

Р Указатель Элемент должен быть указателем. На выходе он будет представлять из себя строку шестнадцатиричных цифр вида ХХХХ: YYYY, где ХХХХ — селектор, YYYY — смещение.

 

s Строка Элемент может иметь тип string, PChar или быть отдельным символом (Char). Эта строка (или символ) вставляются вместо спецификатора формата. Если присутствует поле ргес и длина строки больше его значения, то она усекается.

 

Примечания:

1. Форматирующие символы можно задавать как в верхнем, так и в нижнем регистрах.

2. Тип преобразования m (денежный) тесно связан с правилами представления, принятыми в конкретной стране. Для этого в модуле SYSUTILS определены значения ряда типизированных констант, начальные значения которых берутся из секции [Inti] файла WIN.INI. Вы можете изменять их значения в соответствии с вашими потребностями:

 

CurrencyString: string[7]; Символ (или символы), добавляемые к строке с представлением денежной суммы и обозначающие национальную денежную единицу. Это может быть, например, '$', 'DM' или 'руб'.

 

CurrencyFormat: Byte; Определяет способ добавления знака денежной единицы к строке. Число 1 будет преобразовано так в зависимости от значения этого параметра: '$!' при 0; '1$' при 1; '$ Г при 2; '1 $' при 3.

 

NegCurrFormat: Byte; Определяет способ добавления знака денежной единицы и минуса к строке в том случае, если происходит преобразование отрицательного числа (к положительным числам отношения не имеет). Число -1 будет преобразовано так в зависимости от значения этого параметра: '($!)' при 0; '-$!' при 1; '$-1' при 2; '$!-' при 3; '(!$)' при 4; '-!$' при 5; 'i-$' при 6; '!$-' при 7; '-1 $' при 8; '-$ Г при 9; '$ 1-' при 10.

 

CurrencyDecimals: Byte; Число знаков после запятой в представлении денежных сумм. Например, число 10.15 при разных значениях этого параметра отобразится так: '$10' при 0, '$10.15' при 2, '$10.1500' при 4.

 

ThousandSeparator: Char; Символ, разделяющий строку на группы по три цифры справа налево (разделитель тысяч). Применяется, в частности, в типе преобразования п.

 

DecimalSeparator: Char; Символ, отделяющий дробную часть числа от целой.

 

Мы закончили рассмотрение символа типа преобразования. Рассмотрим остальные составные части спецификатора формата.

 

Поле шириныустанавливает минимально допустимое количество символов в преобразованной строке. Это означает, что если она короче, чем задано в этом поле, то происходит добавление пробелов до требуемого количества. По умолчанию пробелы добавляются спереди (выравнивание по правому краю), но признак выравнивания по левому краю ("-"; он должен стоять перед полем ширины) позволяет выравнивать строку по-иному.

 

Поле индекса позволяет динамически изменить последовательность извлечения аргументов из массива. Обычно аргументы извлекаются последовательно, по мере их востребования спецификаторами формата. Поле индекса означает, что следующим нужно извлечь аргумент с данным индексом. Пользуясь индексом, одни и те же аргументы могут быть использованы многократно. Например, вызов Format ( ' %s %s %0 : s %s ', [ 'Yes', 'No' ] ) Даст на выходе строку 'Yes No Yes No'.

 

Поле точностииграет разную роль в зависимости от того, с каким типом преобразования применяется. Его особенности приведены вместе с описанием типа (с теми из них, где оно имеет смысл).

Поля индекса, ширины и точности могут быть заданы напрямую или косвенно. Первый способ подразумевает явное указание значения поля (например, ' %10 . 5f '). Для косвенного задания значений нужно в соответствующих местах цифры заменить звездочками (например, '%*.*f'). В этом случае вместо звездочек будут подставлены следующие значения из списка аргументов (они обязательно должны быть целыми числами). Например, выражение

 

Code:

Format('Value is %*.*',[10,5, 2.718]);

 

эквивалентно:

 

Code:

Format('Value is %10.5',[2.718]);

 

 

Как уже упоминалось, наиболее употребимой функцией из группы форматирующих является Format, которая работает со строками типа string и максимально освобождает программиста от рутинной работы. Другие функции используют то же ядро и правила преобразования, но отличаются параметрами:

 

procedure FmtStr(var Result: string; const Format: string; const Args: array of const); To же, что и Format, но оформлено в виде процедуры. Результат преобразования возвращается в параметре Result.

 

function StrFmt(Buffer, Format: PChar; const Args: array of const): PChar; Форматирующая строка должна находиться в параметре Format, а результирующая помещается в буфер Buffer (он должен иметь нужную длину). Функция возвращает указатель на Buffer.

 

function StrLFmt(Buffer: PChar; MaxLen: Cardinal; Format: PChar; const Args: array of const) : PChar; Работает как StrFmt, но длина результирующей строки не будет превышать MaxLen символов.

 

function FormatBuf(var Buffer; BufLen: Cardinal; const Format; FmtLen: Cardinal; const Args: array of const) : Cardinal; Форматирующая строка находится в буфере Format длиной FmtLen, a результирующая — в буфере Buffer длиной BufLen. Функция возвращает число реально помещенных в Buffer символов, причем оно всегда меньше или равно BufLen.

Code:

procedure RemoveInvalid(what, where: string): string;

// what - удаляемая подстрока, where - обрабатываемая строка

var

tstr: string;

begin

tstr:=where;

while pos(what, tstr)>0do

tstr:=copy(tstr,1,pos(what,tstr)-1) +

copy(tstr,pos(what,tstr)+length(tstr),length(tstr));

Result:=tstr;

end;

 

 

 

 

//Применение:

 

 

 

NewStr:=RemoveInvalid('<брак>','Этот <брак> в моей строке, и я хочу

удалить из нее этот <брак>');

Используйте стандартную функцию Pascal DELETE...

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

 

Code:

Target:='<брак>';

While POS(Target,string)>0do

begin

P := POS(Target,string);

DELETE(string,P,Length(Target));

end;

Всё даже проще:

 

Code:

{©Drkb v.3(2007): www.drkb. ru, 

®Vit (Vitaly Nevzorov) - nevzorov @ yahoo.com}

Result:=StringReplace(ИсходнаяСтрока,ТоЧтоНадоУдалить,'',[rfReplaceAll])

Code:

{ **** UBPFD *********** by delphibase .endimus .com ****

>> Функция для удаления из строки "лишних" символов.

 

Функция для удаления из строки "лишних" символов.

Входные параметры:

Input - входная строка, которую необходимо очистить от лишних символов

EArray - строка, содержащая набор разрешенных или запрещеных символов

в зависимости от Action

Action - указывает на то, что из себя представляет массив EArray.

 

Action может принимать следующие значения:

1 - массив EArray представляет собой строку разрешенных символов

2 - EArray - массив запрещенных символов.

 

Зависимости: делал в Д5, 6 под Win9x

Автор: Ru, DiVo_Ru @ rambler.ru, Одесса

Copyright: DiVo 2002, creator Ru

 

***************************************************** }

 

function strtst(var Input: string; EArray: string; Action: integer): string;

begin

case Action of

1:

begin

while length(Input) <> 0do

begin

if pos(Input[1], EArray) = 0then

delete(Input, 1, 1)

else

begin

result := result + Input[1];

delete(Input, 1, 1);

end;

end;

end;

2:

begin

while length(Input) <> 0do

begin

if pos(Input[1], EArray) <> 0then

delete(Input, 1, 1)

else

begin

result := result + Input[1];

delete(Input, 1, 1);

end;

end;

end;

else

messagebox(0, 'Не корректный вызов функции.', '', mb_ok);

end;

end;

Пример использования:

 

// 1.

s := edit1.text;

s := strtst(s, '0123456789.', 1);

edit1.text := s;

 

// например на входе: 0.16+

// на выходе будет: 0.16

 

// 2.

s := edit1.text;

s := strtst(s, '/*-+,', 2);

edit1.text := s;

 

// на входе: 0.16+

// на выходе будет: 0.16