![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
разбор строка
Максим © (2008-02-20 09:31:00)я передаю параметры для работы свой программы через строку(например так: -a -b -c) все работает,но хотелось чтобы -abc было равносильно -a -b -c.
Как такое сделать?
Максим (2008-02-20 23:13:00) [21]буду рад,но сам тоже сейчас помучаюсь, может выйдет что...
Palladin (2008-02-20 22:20:00) [22]хм... легко... если дождешься до завтра... когда пива во мне будет меньше чем меня в пиве...
Максим (2008-02-20 21:11:00) [23]хм...что-то криво я изъясняюсь... попробую по-нормальному!:)
Есть основная программа(main) и куча плагинов.
В main есть edit, в котором я пишу: 1)первое слово это название плагина,которому будут передаваться параметры и сами данные на обработку. 2) параметры 3) данные на обработку.
Получается что первое слово удаляем(название плагина) все остальное передаем плагину на обработку,тот в свою очередь должен понять что за параметры,и какие у них значения если они вообще предусматриваются. т.е. на пример параметр -a и -b идут как "просто" параметры, а параметр -c и -d должны быть со значениями,т.е. -a -b -c 5 -d 10, и если после параметра с или d нету значение то result = 'error parametrs' and exit ;)
Максим (2008-02-20 20:35:00) [24]еще забыл сказать что программы которым я передаю парамтеры,не являются программами "***.exe", Это мои плагины которым я передаю параметры. не пинайте сильно если это кардинально меняет решение всей задачи :))
Максим (2008-02-20 20:32:00) [25]прошу прощения что не поучавствовал в обсуждении моего вопроса, только добрался до компутера :)
Большое спасибо всем за ответы! Григорьев Антон прав, по умолчанию параметры выключены, знак "-" означает что параметр включается, причем памаметр может быть просто "-a" а может быть со значением "-a 15", т.е. включаем параметр а со значением 15.
Ща буду разбираться что вы мне тут понаписали! =)
{RASkov} (2008-02-20 12:00:00) [26]> [16] {RASkov} © (20.02.08 11:31)
Хм.... код [16] содержит ошибку... При параметрах "prog -ab-c" покажет, что a и b выключены, а с - включен :(
Могут и еще быть ошибки... нужно тестить :)
А может Антон прав, и не нужно парится, тогда - [12]
Хотя... Ключи это - "/х" а параметры - "/х: -y" или "/х: y" - вроде как.... Впрочем это все условно по большей части, и зависит от программиста...
{RASkov} (2008-02-20 11:31:00) [27]"немного" переделал код [12]
type
TParamState = (psNone, psEnable, psDisable);
procedure TForm1.GetParam;
var
ParamsPresent: array['A'..'Z'] of TParamState;
I, J: Integer;
S: string; C: Char;
begin
FillChar(ParamsPresent, SizeOf(ParamsPresent), 0);
for I := 1 to ParamCount do begin
S := ParamStr(I);
J:=1;
while J<=Length(S) do begin
if (S[J]='-') and (J<Length(S)) then begin
INC(J);
while UpCase(S[J]) in ['A'..'Z'] do begin
ParamsPresent[UpCase(S[J])] := psDisable;
INC(J); Continue;
end;
end;
if UpCase(S[J]) in ['A'..'Z'] then ParamsPresent[UpCase(S[J])] := psEnable
else ParamsPresent[UpCase(S[J])] := psNone;
INC(J);
end;
end;
Caption:=cmdLine;
for C:='A' to 'Z' do
case ParamsPresent[C] of
psNone: ListBox1.Items.Add(C + ' - >> не определен');
psEnable: ListBox1.Items.Add(C + ' - Включен!!');
psDisable: ListBox1.Items.Add(C+ ' - ВЫКЛЮЧЕН');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
GetParam;
end;
Не тестировал, но вроде работает.... единственное - ключи могут повторятся и реально покажется последний из них
проверил с такими параметрами prog -acf g +j-k -n+xk
ключ k - первый раз сбрасывается, второй - устанавливается....
> [15] Григорьев Антон © (20.02.08 11:28)
> Не думаю. "-" принято использовать в командной строке как
> признак того, что данный параметр является ключом, включающим
> что-то, что по умолчанию выключено
Ну мало ли :)
Григорьев Антон (2008-02-20 11:28:00) [28]
> {RASkov} © (20.02.08 11:01) [13]
> а если параметр не -abc а просто abc?) Я так понял, что
> "-" выключает, без него(-) типа "+" - включено....
Не думаю. "-" принято использовать в командной строке как признак того, что данный параметр является ключом, включающим что-то, что по умолчанию выключено. В DOS'е, вообще-то, было принято использовать для этого прямой слэш, а "-" - это из UNIX'ов, но постепенно "-" победил и в MS'овских системах.
> Johnmen © (20.02.08 11:02) [14]
> Ты действительно такой наивный?
Я специально использовал не слишком известные новичкам вещи, чтобы, если в человеке есть хоть искра интереса, ему стало бы хотя бы любопытно. Тогда разберётся. А если искры нет, то всё равно впрок не пойдёт, на чём-нибудь другом споткнётся.
Johnmen (2008-02-20 11:02:00) [29]
> // Домашнее задание - разобраться, почему
Ты действительно такой наивный?
{RASkov} (2008-02-20 11:01:00) [30]> [12] Григорьев Антон © (20.02.08 10:50)
> if (Length(S) > 0) and (S[1]='-') then
а если параметр не -abc а просто abc?) Я так понял, что "-" выключает, без него(-) типа "+" - включено....
> Максим
> // Домашнее задание - разобраться, почему
Григорьев Антон (2008-02-20 10:50:00) [31]
var
ParamsPresent: array['A'..'Z'] of Boolean;
I, J: Integer;
S: string;
begin
FillChar(ParamsPresent, SizeOf(ParamsPresent), 0);
for I := 1 to ParamCount do
begin
S := ParamStr(I);
if (Length(S) > 0) and (S[1]='-') then
begin
for J := 2 to Length(S) do
if UpCase(S[J]) in ['A'..'Z'] then
ParamsPresent[UpCase(S[J])] := True
end
end;
// После выполнения этого кода если некоторая буква встретилась в параметрах,
// то ParamsCount[Эта_буква_в_верхнем_регистре] = True, если не встретилась - False
// Домашнее задание - разобраться, почему
end;
Ник (2008-02-20 10:49:00) [32]Похоже, что опять не докурили ...
Так читайте же вопросы внимательней.
Автор просит именно то, что предложил allucard (20.02.08 09:44) [1]
oldman (2008-02-20 10:46:00) [33]
> -abc было равносильно -a -b -c
А зачем?
Покажи мне прогу, где реализована подобная система передачи параметров...
Или считаешь юзеров даунами? Что, мол, они могут забыть, как передавать параметры?
"Либо дудочка, либо кувшинчик" ©
{RASkov} (2008-02-20 10:43:00) [34]> [8] palva © (20.02.08 10:39)
> что параметрыпередаются через строку, то есть параметр всегда один
Это как? :)
> И сабж он называет "разбор строки"
тогда ему нужно cmdline получается, и разбирать ее до посинения :)
palva (2008-02-20 10:39:00) [35]В сабже ясно сказано, что параметры передаются через строку, то есть параметр всегда один. Программа prog, видимо, запускается так:
prog "-a -b -c"
Строку эту автор получает s := Param[1];
И сабж он называет "разбор строки"
{RASkov} (2008-02-20 09:50:00) [36]> [1] allucard (20.02.08 09:44)
садись - два (с)
{RASkov} (2008-02-20 09:49:00) [37]Ух... чет я медленно печатаю.... понаотвечали тут уже :)
Ega23 (2008-02-20 09:48:00) [38]
> allucard (20.02.08 09:44) [1]
Ты сам проверил то, что тут насоветовал?
{RASkov} (2008-02-20 09:48:00) [39]> [0] Максим (20.02.08 09:31)
Так:
> -a -b -c
это три параметра, а так:
> -abc
один. Вот и вся разница.... анализируй один параметр, ну и типаfor i:=1 to length(ParamStr(N)) do if ParamStr(N)[i].... then ... else ...., как обычно....
Ega23 (2008-02-20 09:47:00) [40]
> я передаю параметры для работы свой программы через строку(например
> так: -a -b -c) все работает,но хотелось чтобы -abc было
> равносильно -a -b -c.
Так делать некорректно. Но если очень хочется, то ParamCount, ParamStr(N), Pos или StringReplace, ко всему этому F1 и подключенные мозги.
Пишется за 20 минут максимум.