Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.051 c
15-1158741443
Max Zyuzin
2006-09-20 12:37
2006.10.15
Формирование отчетов. Выбор средства формирования


8-1142592661
Noby
2006-03-17 13:51
2006.10.15
Фильтры в DirectShow?


15-1158852923
S@sha
2006-09-21 19:35
2006.10.15
Шпион


15-1158949396
vidiv
2006-09-22 22:23
2006.10.15
Как правильно делать свой Edit?


15-1158737267
Ega23
2006-09-20 11:27
2006.10.15
С Днём рождения! 20 сентября





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский