Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Получение параметра из строки по его индексу

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

Получение параметра из строки по его индексу

 
Code:
{ **** UBPFD *********** by kladovka.net.ru ****
>> Получение параметра из строки по его индексу, а также получение общего числа параметров в строке
 
В юните представлены две функции, одна из которых, GetParamFromString, позволяет получить параметр из строки, по индексу этого параметра (индексация начинается с 1). Параметров в строке, я называю части строк, разделённые каким-нибудь оговорённым разделителем, например символом ";".
К пример строка "fex;9x-1;code" имеет три параметра:
fex
9x-1
code.
 
Описание аргументов функции GetParamFromString:
SourceStr - строка, содержащая в себе параметры;
Delimiter - разделитель параметров в строке;
Ind - индекс запрашиваемого параметра.
 
Функция GetParamsCount просто возвращает количество параметров в строке.
Описание аргументов функции GetParamsCount:
SourceStr - строка, содержащая в себе параметры;
Delimiter - разделитель параметров в строке;
 
Зависимости: Windows
Автор:       VID, ICQ:132234868, Махачкала
Copyright:   (c) не моё
Дата:        26 апреля 2004 г.
********************************************** }
 
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^):=0 else 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<>0 do
begin
   inc(result);
   subpos:=pointer(integer(subpos)+i+len-1);
   i:=pos(delimeter,subpos);
end;
if (byte(subpos^))<>0 then 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', ';')));
 

Статья Получение параметра из строки по его индексу раздела Синтаксис Текст и Строки может быть полезна для разработчиков на Delphi и FreePascal.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



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


реклама



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

Время компиляции файла: 2024-04-24 22:55:34
2024-04-26 09:42:34/0.003389835357666/0