Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

Парсер аргументов командной строки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.142 c
1-1157442128
speaker_avi
2006-09-05 11:42
2006.10.15
вопрос о monthcalendar


6-1148280538
Тфьу
2006-05-22 10:48
2006.10.15
TIdSMTP при отсылке в теме пишет ерунду...


2-1159190036
Интересующийся
2006-09-25 17:13
2006.10.15
несколько в одном прокручивающемся списке


6-1147705710
rockman
2006-05-15 19:08
2006.10.15
порты в delphi


2-1159183904
XTD
2006-09-25 15:31
2006.10.15
Как работать с USB?