Вверх ↑
Ответов: 5227
Рейтинг: 587
#1: 2022-07-09 15:32:22 ЛС | профиль | цитата
TheRenat, Несомненно получать ключи гораздо удобней чем через массив.
Есть правда некоторые замечания (несущественные)
Свойствo Args логичней будет Keys(т.е список ключей)
к примеру я попробовал такой вариант (правда для FPC нужно подшаманить)
Так же желательно сделать приведение к типу (допустим по первому символу ключа -sInput = string, -iCount = integer)
pas:
unit hiArgParser;

interface

uses Kol,Share,Debug,Windows;

type
THIArgParser = class(TDebug)
private
LstKeys: PStrList;
LstParam: PStrList;
FLoadParam: boolean;
procedure SetKeys(Value: string);
procedure LoadParam;
public
_prop_Prefix: string;
destructor Destroy; override;
procedure _var_Keys(var _Data: TData; Index: word);
property _prop_Keys: string write SetKeys;
end;

implementation

destructor THIArgParser.Destroy;
begin
LstKeys.Free;
LstParam.Free;
inherited;
end;


procedure THIArgParser.LoadParam;
var
i: integer;
s,s2: string;
begin
s := GetCommandLine+' ';
//вырежем имя приложения
s2 := GetTok(s,_prop_Prefix[1]);
for i := 1 to ParamCount do
begin
s2 := GetTok(s,_prop_Prefix[1]);
if LstParam.IndexOf(s2) = -1 then
LstParam.Add(s2)
end;
FLoadParam := True;
end;

procedure THIArgParser.SetKeys(Value: string);
begin
LstKeys := NewStrList;
LstParam := NewStrList;
LstParam.NameDelimiter := ' ';
LstKeys.Text := Value;
end;

procedure THIArgParser._var_Keys;
var
s: string;
idx: integer;
begin
if not FLoadParam then LoadParam;
s := LstKeys.Items[Index];
idx := LstParam.IndexOfName(s);
if idx = -1 then //ключ отсутствует
begin
dtNull(_Data);
Exit;
end;

s := LstParam.LineValue[idx];
dtString(_Data,s);
end;

end.

ini:
[About]
Version=1.4
Author=TheRenat
Mail=

[Type]
Class=DPLElement
Sub=,,Keys,
Info=Продвинутый парсер аргументов командной строки
Tab=Tools

[Property]
+Keys=Используемые ключи|5|
Prefix=Префикс ключей|2|-

p.s Видимо пользователям разработчики уже не нужны. Видать всё можно нарисовать уже кубиками, через жопу конечно но почти всё
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Редактировалось 4 раз(а), последний 2022-07-10 09:41:14