Форум: "Прочее";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизПарсер аргументов командной строки Найти похожие ветки
← →
Opilki_Inside © (2006-09-22 11:04) [0]Поделитесь плиз модулем парсинга командной строки.. ?
← →
Василий Блаженный (2006-09-22 11:10) [1]
function Parse(Char, S: string; Count: Integer): string;
var
I: Integer;
T: string;
begin
if S[Length(S)] <> Char then
S := S + Char;
for I := 1 to Count do
begin
T := Copy(S, 0, Pos(Char, S) - 1);
S := Copy(S, Pos(Char, S) + 1, Length(S));
end;
Result := T;
end;
function Explode(Str: WideString; Del: String; Ret: Integer): String;
begin
Result := Parse(Del, Str, Ret);
end;
function ParseParams(checkparam: string): boolean;
var i: word;
begin
result := false;
for i := 1 {или 0, если ещё имя нужно} to ParamCount-1 do begin
if (SameText(checkparam, paramstr(i)) begin
result := true;
break;
end;
end;
end;
← →
Opilki_Inside © (2006-09-22 11:16) [2]а мона небольшое пояснение?
← →
Василий Блаженный (2006-09-22 11:26) [3]explode - разбивка строки по разделителям, это я просто так привёт
parseparams - проверка существует ли параметр в строке параметров
← →
Dmitrij_K (2006-09-22 11:32) [4]см. System.pas
function ParamStr(Index: Integer): string;
← →
Василий Блаженный (2006-09-22 11:37) [5]Dmitrij_K так уже указано: if (SameText(checkparam, paramstr(i)) begin
← →
Opilki_Inside © (2006-09-22 11:43) [6]
> Dmitrij_K (22.09.06 11:32) [4]
> см. System.pas function ParamStr(Index: Integer): string;
>
да я это знаю... не буду ж я к параметрам по индексу обращаться
← →
Василий Блаженный (2006-09-22 11:45) [7]Ну а ты возьми ParseParams и обращайся по имени:)
← →
Dmitrij_K (2006-09-22 11:49) [8]
> Поделитесь плиз модулем парсинга командной строки.. ?
Ты просил модуть.
Получи - system.pas
← →
Opilki_Inside © (2006-09-22 11:49) [9]
> Василий Блаженный (22.09.06 11:45) [7]
> Ну а ты возьми ParseParams и обращайся по имени:)
Напиши лучше пример командной строки.. такое она парсит или как должно быть?
program.exe --username=Pavel --server=localhost -H -S
← →
AlexKniga © (2006-09-22 11:50) [10]for i := 1 {или 0, если ещё имя нужно} to ParamCount-1 do begin
-1 лишняя (если надо просмотреть все параметры).
← →
Zeqfreed © (2006-09-22 11:53) [11]getopt.c рулит. Исходников можно тьму найти при желании.
← →
ЮЮ © (2006-09-22 12:05) [12]for i := 1 to ParamCount do begin
param := ParamStr(i);
if LowerCase(Copy(param, 1, 11)) = "--username=" then
userName := Copy(param, 12, length(param))
else if ...
end;
← →
Василий Блаженный (2006-09-22 12:17) [13]угу. "--username=" then
userName := Copy(param, 12, length(param))
а дальше у него параметров нет?
← →
ЮЮ © (2006-09-22 12:20) [14]if LowerCase(Copy(param, 1, 11)) = "--username=" then
userName := Copy(param, 12, length(param))
else if LowerCase(Copy(param, 1, 9)) = "--server=" then
userName := Copy(param, 10, length(param))
else ...
← →
ЮЮ © (2006-09-22 12:21) [15]serverName := Copy(param, 10, length(param)), конечно
← →
Василий Блаженный (2006-09-22 12:25) [16]^C+V рулит:)
и не факт что параметры идут именно в такой последовательности...
← →
Василий Блаженный (2006-09-22 12:33) [17]// обрабатывает: --username, --password, --hostname, выдаёт дополнительные параметры списком, если присутствуют.
type TIdParams=packed record;
un, pwd, host: string;
other: tstringlist;
end;
function ParseParams: TidParams;
var i: byte;
begin
with Result do begin
i := FindParam("username");
if (i<>-1) then un := ParamStr(i+1);
i := FindParam("password");
if (i<>-1) then pwd := ParamStr(i+1);
i := FindParam("host");
if (i<>-1) then pwd := ParamStr(i+1);
{и так далее для всех переменных}
end;
end;
function FindParam(P: String; Dlm: String="--"): Integer;
var I: Word;
begin
I := 0; Result := -1;
while (I <> ParamCount) do begin
if (SameText(ParamStr(I), (Dlm+P))) then begin
Result := I;
break;
end;
Inc(I);
end;
end;
Единственное что - строка параметр/значение должна быть через пробел, а не через равно...
← →
Василий Блаженный (2006-09-22 12:34) [18]i := FindParam("host");
if (i<>-1) then pwd := ParamStr(i+1);
{и так далее для всех переменных}
end; извиняюсь: вот так.
i := FindParam("host");
if (i<>-1) then host := ParamStr(i+1);
{и так далее для всех переменных}
end;
← →
Василий Блаженный (2006-09-22 12:35) [19]а про список забыл... ну и фиг с ним...
← →
ЮЮ © (2006-09-22 12:58) [20]
> и не факт что параметры идут именно в такой последовательности.
> ..
какая разница в какой последовательности? Каждый параметр пройдет через эту проверку
← →
Чапаев © (2006-09-23 09:57) [21]А SysUtils.FindCmdLineSwitch() чем не устраивает?.. А TStringList?..
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c