Карта сайта 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, содержащий два функционала: GetParamsCount и GetParamFromString. Функция GetParamsCount возвращает количество параметров в заданной строке, разделенной указанным разделителем. Функция GetParamFromString извлекает конкретный параметр из строки по его индексу (1-основанный).

Вот подробное описание кода:

  1. Функция GetDTextItem: Это вспомогательная функция, используемая функцией GetParamFromString. Она принимает три параметра:

    • DText: Входная строка.
    • delimeter: Разделитель символа.
    • idx: Индекс желаемого параметра (1-основанный). Функция итерирует по входной строке, находит указанный разделитель и обновляет переменную result соответственно. Если текущая позиция равна указанному индексу или если разделитель не найден, функция выходит из цикла.
  2. Функция GetDTextCount: Это функция, принимающая два параметра:

    • DText: Входная строка.
    • delimeter: Разделитель символа. Функция считает количество вхождений разделителя в входную строку и возвращает результат.
  3. Функция GetParamsCount: Это обертка вокруг функции GetDTextCount. Она просто вызывает функцию GetDTextCount с указанными параметрами и возвращает результат.

  4. Функция GetParamFromString: Это функция, принимающая три параметра:

    • SourceStr: Входная строка.
    • Delimiter: Разделитель символа.
    • Ind: Индекс желаемого параметра (1-основанный). Функция использует функцию GetDTextItem для извлечения указанного параметра из входной строки и возвращает результат.

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

ShowMessage(GetParamFromString('1;2a;3;4', ';', 2));
ShowMessage(IntToStr(GetParamsCount('1;2;3;4', ';')));

В первом примере функция GetParamFromString вызывается с входной строкой '1;2a;3;4', разделителем ';' и индексом 2. Она возвращает второй параметр ('2a') как строку.

Во втором примере функция GetParamsCount вызывается с входной строкой '1;2;3;4', разделителем ';'. Она возвращает количество параметров в строке (которое равно 4).

Код хорошо структурирован и легко понятен. Однако стоит отметить, что использование PChar и GetMem/FreeMem можно заменить более современными функциями Delphi, такими как TString и String. Кроме того, обработка ошибок могла быть улучшена добавлением проверок для недопустимых входных данных или потенциальных нарушений доступа к памяти.

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


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-04-04 05:39:05/0.012784004211426/1