Code: |
{ **** UBPFD *********** by kladovka.net **** >> Получение параметра из строки по его индексу, а также получение общего числа параметров в строке
В юните представлены две функции, одна из которых, GetParamFromString, позволяет получить параметр из строки, по индексу этого параметра (индексация начинается с 1). Параметров в строке, я называю части строк, разделённые каким-нибудь оговорённым разделителем, например символом ";". К пример строка "fex;9x-1;code" имеет три параметра: fex 9x-1 code.
Описание аргументов функции GetParamFromString: SourceStr - строка, содержащая в себе параметры; Delimiter - разделитель параметров в строке; Ind - индекс запрашиваемого параметра.
Функция GetParamsCount просто возвращает количество параметров в строке. Описание аргументов функции GetParamsCount: SourceStr - строка, содержащая в себе параметры; Delimiter - разделитель параметров в строке;
Зависимости: Windows Автор: VID, ICQ:132234868, Махачкала Copyright: (c) не моё
********************************************** }
unit getstrparam;
interface
uses Windows;
function GetParamsCount (const SourceStr, Delimiter:String): integer; function GetParamFromString(const SourceStr,Delimiter:String; Ind:integer):string;
implementation
function GetDTextItem(DText,delimeter:pchar;var idx:integer):Pchar; var nextpos:Pchar;i,len, p:integer; begin result:=DText; len:=length(delimeter); if (len=0) or (DText='') then exit; i:=1; while TRUE do begin p:=pos(delimeter,result); if (p<>0) then nextpos:=pointer(integer(result)+p-1) else nextpos:=pointer(integer(result)+length(result)); if (i=idx) or (p=0) then break; result:=pointer(integer(nextpos)+len); inc(i); end; if i=idx then byte(nextpos^):=0else byte(result^):=0; end;
function GetDTextCount(DText,delimeter:pchar):integer; var subpos:Pchar;i,len:integer; begin result:=0; len:=length(delimeter); if (len=0) or (DText='') then exit; subpos:=DText; i:=pos(delimeter,subpos); while i<>0do begin inc(result); subpos:=pointer(integer(subpos)+i+len-1); i:=pos(delimeter,subpos); end; if (byte(subpos^))<>0then inc(result); end;
function GetParamsCount (const SourceStr, Delimiter:String): integer; begin Result:=GetDTextCount(PChar(SourceStr), PChar(Delimiter)); end;
function GetParamFromString(const SourceStr,Delimiter:String; Ind:integer):string; var TmpS, TmpRes:PChar; LRes:integer; begin GetMem (Tmps, Length(SourceStr)+1); try CopyMemory(Tmps, PChar(SourceStr), Length(SourceStr)); Byte(Pointer(Integer(Tmps)+Length(SourceStr))^):=0; TmpRes:=GetDTextItem(TmpS, PChar(Delimiter), Ind); LRes:=Length(TmpRes); SetLength(Result,LRes); CopyMemory(@Result[1], TmpRes, LRes); finally FreeMem(TmpS); end; end;
end. |
Пример использования:
Code: |
showmessage(GetParamFromString('1;2a;3;4', ';',2)); showmessage(inttostr(GetParamsCount('1;2;3;4', ';'))); |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!