Текущий архив: 2008.03.23;
Скачать: CL | DM;
Вниз
разбор строка Найти похожие ветки
← →
Максим (2008-02-20 09:31) [0]я передаю параметры для работы свой программы через строку(например так: -a -b -c) все работает,но хотелось чтобы -abc было равносильно -a -b -c.
Как такое сделать?
← →
allucard (2008-02-20 09:44) [1]только не помню как параметры идентифицируются.
Перекинь их в переменные, или в StringList.
var s: string;
s := Param[1]; //присваиваем параметр переменной
for i:=0 to length(s) do
begin
s[i]; -вот те твои параметры в отдельности
end;
← →
Palladin © (2008-02-20 09:47) [2]
> [1] allucard (20.02.08 09:44)
бред какой то...
> я передаю параметры для работы свой программы через строку(например
> так: -a -b -c) все работает,но хотелось чтобы -abc было
> равносильно -a -b -c.
> Как такое сделать?
вот тема называется "разбор строка" вот и делай разбор строка... ищи первое вхождение " -" и копируй до следующего пробела... все что найдешь все твое...
← →
Ega23 © (2008-02-20 09:47) [3]
> я передаю параметры для работы свой программы через строку(например
> так: -a -b -c) все работает,но хотелось чтобы -abc было
> равносильно -a -b -c.
Так делать некорректно. Но если очень хочется, то ParamCount, ParamStr(N), Pos или StringReplace, ко всему этому F1 и подключенные мозги.
Пишется за 20 минут максимум.
← →
{RASkov} © (2008-02-20 09:48) [4]> [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:48) [5]
> allucard (20.02.08 09:44) [1]
Ты сам проверил то, что тут насоветовал?
← →
{RASkov} © (2008-02-20 09:49) [6]Ух... чет я медленно печатаю.... понаотвечали тут уже :)
← →
{RASkov} © (2008-02-20 09:50) [7]> [1] allucard (20.02.08 09:44)
садись - два (с)
← →
palva © (2008-02-20 10:39) [8]В сабже ясно сказано, что параметры передаются через строку, то есть параметр всегда один. Программа prog, видимо, запускается так:
prog "-a -b -c"
Строку эту автор получает s := Param[1];
И сабж он называет "разбор строки"
← →
{RASkov} © (2008-02-20 10:43) [9]> [8] palva © (20.02.08 10:39)
> что параметры передаются через строку, то есть параметр всегда один
Это как? :)
> И сабж он называет "разбор строки"
тогда ему нужно cmdline получается, и разбирать ее до посинения :)
← →
oldman © (2008-02-20 10:46) [10]
> -abc было равносильно -a -b -c
А зачем?
Покажи мне прогу, где реализована подобная система передачи параметров...
Или считаешь юзеров даунами? Что, мол, они могут забыть, как передавать параметры?
"Либо дудочка, либо кувшинчик" ©
← →
Ник (2008-02-20 10:49) [11]Похоже, что опять не докурили ...
Так читайте же вопросы внимательней.
Автор просит именно то, что предложил allucard (20.02.08 09:44) [1]
← →
Григорьев Антон © (2008-02-20 10:50) [12]
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;
← →
{RASkov} © (2008-02-20 11:01) [13]> [12] Григорьев Антон © (20.02.08 10:50)
> if (Length(S) > 0) and (S[1]="-") then
а если параметр не -abc а просто abc?) Я так понял, что "-" выключает, без него(-) типа "+" - включено....
> Максим
> // Домашнее задание - разобраться, почему
← →
Johnmen © (2008-02-20 11:02) [14]
> // Домашнее задание - разобраться, почему
Ты действительно такой наивный?
← →
Григорьев Антон © (2008-02-20 11:28) [15]
> {RASkov} © (20.02.08 11:01) [13]
> а если параметр не -abc а просто abc?) Я так понял, что
> "-" выключает, без него(-) типа "+" - включено....
Не думаю. "-" принято использовать в командной строке как признак того, что данный параметр является ключом, включающим что-то, что по умолчанию выключено. В DOS"е, вообще-то, было принято использовать для этого прямой слэш, а "-" - это из UNIX"ов, но постепенно "-" победил и в MS"овских системах.
> Johnmen © (20.02.08 11:02) [14]
> Ты действительно такой наивный?
Я специально использовал не слишком известные новичкам вещи, чтобы, если в человеке есть хоть искра интереса, ему стало бы хотя бы любопытно. Тогда разберётся. А если искры нет, то всё равно впрок не пойдёт, на чём-нибудь другом споткнётся.
← →
{RASkov} © (2008-02-20 11:31) [16]"немного" переделал код [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)
> Не думаю. "-" принято использовать в командной строке как
> признак того, что данный параметр является ключом, включающим
> что-то, что по умолчанию выключено
Ну мало ли :)
← →
{RASkov} © (2008-02-20 12:00) [17]> [16] {RASkov} © (20.02.08 11:31)
Хм.... код [16] содержит ошибку... При параметрах "prog -ab-c" покажет, что a и b выключены, а с - включен :(
Могут и еще быть ошибки... нужно тестить :)
А может Антон прав, и не нужно парится, тогда - [12]
Хотя... Ключи это - "/х" а параметры - "/х:-y" или "/х:y" - вроде как.... Впрочем это все условно по большей части, и зависит от программиста...
← →
Максим (2008-02-20 20:32) [18]прошу прощения что не поучавствовал в обсуждении моего вопроса, только добрался до компутера :)
Большое спасибо всем за ответы! Григорьев Антон прав, по умолчанию параметры выключены, знак "-" означает что параметр включается, причем памаметр может быть просто "-a" а может быть со значением "-a 15", т.е. включаем параметр а со значением 15.
Ща буду разбираться что вы мне тут понаписали! =)
← →
Максим (2008-02-20 20:35) [19]еще забыл сказать что программы которым я передаю парамтеры,не являются программами "***.exe", Это мои плагины которым я передаю параметры. не пинайте сильно если это кардинально меняет решение всей задачи :))
← →
Максим (2008-02-20 21:11) [20]хм...что-то криво я изъясняюсь... попробую по-нормальному!:)
Есть основная программа(main) и куча плагинов.
В main есть edit, в котором я пишу: 1)первое слово это название плагина,которому будут передаваться параметры и сами данные на обработку. 2) параметры 3) данные на обработку.
Получается что первое слово удаляем(название плагина) все остальное передаем плагину на обработку,тот в свою очередь должен понять что за параметры,и какие у них значения если они вообще предусматриваются. т.е. на пример параметр -a и -b идут как "просто" параметры, а параметр -c и -d должны быть со значениями,т.е. -a -b -c 5 -d 10, и если после параметра с или d нету значение то result = "error parametrs" and exit ;)
← →
Palladin © (2008-02-20 22:20) [21]хм... легко... если дождешься до завтра... когда пива во мне будет меньше чем меня в пиве...
← →
Максим (2008-02-20 23:13) [22]буду рад,но сам тоже сейчас помучаюсь, может выйдет что...
← →
Сергей М. © (2008-02-20 23:26) [23]
> Максим (20.02.08 21:11) [20]
Ты что, мазохист ?)
За каким лешим тебе понадобилось своему плагину (т.е. некоему программному модулю, о котором никто не знает кроме твоего приложения, и который нафих не нужен другим приложениям) передавать параметры в виде текста, да еще и в извращенной форме ?)
← →
Сергей М. © (2008-02-20 23:28) [24]
> сам тоже сейчас помучаюсь
Пора тебе полаться в *никсоиды - там как никто и нигде более уважают/ценят/холят/лелеют command-line-параноиков)
← →
Максим (2008-02-20 23:31) [25]Так надо, здесь я лишь прошу помощи(смотрите выше о чем речь).
Если же у вас есть какие то предложения или советы,то милости просим. А писать то, что нахрен мне это надо....
нчиего личного, просто хочется советов и т.п. услышать =)
← →
Сергей М. © (2008-02-20 23:49) [26]
> милости просим
Ну я уже зашел. С советом. Без стука)
Совет, за неимением вразумительных объяснений по поводу оправданности именно такого интерфейса межмодульного взаимодействия, как раз и выглядит как "выкинуть нафих интерфейс ком.строки вместе с ее парсинг-велосипедом".
← →
Максим (2008-02-21 00:17) [27]допустим выкиеу и что взамен этого?
← →
Бегущий человек © (2008-02-21 00:27) [28]Memory mapped file спасут отца русской демократии
← →
Максим (2008-02-21 00:34) [29]причем тут mmap?
← →
Германн © (2008-02-21 00:43) [30]
> Максим (20.02.08 21:11) [20]
>
> хм...что-то криво я изъясняюсь... попробую по-нормальному!
> :)
>
> Есть основная программа(main) и куча плагинов.
> В main есть edit, в котором я пишу: 1)первое слово это название
> плагина,которому будут передаваться параметры и сами данные
> на обработку. 2) параметры 3) данные на обработку.
> Получается что первое слово удаляем(название плагина) все
> остальное передаем плагину на обработку,тот в свою очередь
> должен понять что за параметры,и какие у них значения если
> они вообще предусматриваются. т.е. на пример параметр -a
> и -b идут как "просто" параметры, а параметр -c и -d должны
> быть со значениями,т.е. -a -b -c 5 -d 10, и если после параметра
> с или d нету значение то result = "error parametrs" and
> exit ;)
>
1. Поработай над "разбором строк". Т.е. на функциях/процедурах из букваря.
В частности Pos и Copy. Изучи их хорошенько.
2. Параметры не принято передавать в виде "-d 10". Их принято передавать в виде "-d10". Поскольку пробел разделяет параметры.
3. После изучения букваря вернись к ещё одному прочтению [23]. Осознай его суть и если что тогда будет непонятно, задай другой вопрос.
← →
Бегущий человек © (2008-02-21 00:44) [31]
> Сергей М. © (20.02.08 23:49) [26]
>
> Совет, за неимением вразумительных объяснений по поводу
> оправданности именно такого интерфейса межмодульного взаимодействия,
> как раз и выглядит как "выкинуть нафих интерфейс ком.строки
> вместе с ее парсинг-велосипедом".
>
> Максим (21.02.08 00:17) [27]
>
> допустим выкиеу и что взамен этого?
А то, что теперь
1) Парсим строку параметров в main
2)Записываем параметры в mmap
3)Шлём плагину сообщение, и он все из mmap вычитывает, без геморроя c Paramstr
← →
Германн © (2008-02-21 00:54) [32]
> Бегущий человек © (21.02.08 00:44) [31]
>
>
> А то, что теперь
> 1) Парсим строку параметров в main
> 2)Записываем параметры в mmap
> 3)Шлём плагину сообщение, и он все из mmap вычитывает, без
> геморроя c Paramstr
>
Дык у автора проблемы именно с парсингом строки.
← →
Бегущий человек © (2008-02-21 01:03) [33]
> Германн © (21.02.08 00:54) [32]
А, ну если параметры сложной структуры, со значениями ,тогда аффтару советую прочесть про синтаксический разбор (самый простой метод - рекурсивный спуск).
← →
Германн © (2008-02-21 01:05) [34]
> Бегущий человек © (21.02.08 01:03) [33]
>
>
> > Германн © (21.02.08 00:54) [32]
>
> А, ну если параметры сложной структуры, со значениями ,
> тогда аффтару советую прочесть про синтаксический разбор
> (самый простой метод - рекурсивный спуск).
>
До изучения букваря?
← →
Сергей М. © (2008-02-21 08:40) [35]
> допустим выкиеу и что взамен этого?
Да что угодно)
Мало ли возможностей передать/принять нетекстовые параметры в натуральном виде, без преобразований в строку и обратно ..
← →
Максим (2008-02-21 10:28) [36]Германн © (21.02.08 00:43) [30]
2. Параметры не принято передавать в виде "-d 10". Их принято передавать в виде "-d10". Поскольку пробел разделяет параметры.
>2. А если в качестве значение передается строка, то получиться -dstroka что некрасиво,и думаю чтьо не правильно.
Сергей М. © (21.02.08 08:40) [35]
если есть возможность то предложите другой вариант передачи параметров.
Если честно,то я не пойму чем плох сам варинт передачи параметров моим плагинам.
Само присутстиве плагинов считаю уместным в моем случае,т.к. довольно узко-направленные рассчеты производятся в них. Рассчитано на узкий круг людей, которым я продаю их по мере надобности(но не об этом в теме,просто хочу чтобы вы поняли мои действия и могли направить в нужное русло). В каждом плагине реализуется обработка тех или иных данных,причем в некотрых полностью отсутствуют каки-либо параметры,кроме как включение его в работу. В некоторые нужно передавать строкуи параметры для обработки(самый частый вариант в моем случае).
Спасибо всем за ответы! Если есть какие то конкретные мысли, говорите, я все готов выслушать дабы сделать правильно!
По-поводу copy,pos,я умею ими пользоваться и представляю как сделать вариант будь то просто -a 10 -t -b -g 15 -h stroka,
но мне все же хотелось узнать как делать правильно и грамотно!
← →
Сергей М. © (2008-02-21 10:32) [37]
> предложите другой вариант передачи параметров
Вариант прост до безобразия - плагин экспортирует некую ф-цию вида
DoSomethingWithParams(Params: TMyParams)
где, например,
TMyParams = array of OleVariant;
← →
{RASkov} © (2008-02-21 10:37) [38]> [36] Максим (21.02.08 10:28)
> то получиться -dstroka что некрасиво,и думаю чтьо не правильно.
А это обязательность такая, любоваться параметрами коммандной строкой?
> но мне все же хотелось узнать как делать правильно и грамотно!
Я думаю, что вот так будет правильнее
-d:stroka
НО! Зачем вообще здесь параметры коммандной строки? Уже об этом говорят.... Просто твоя задача мне, например, не совсем ясна, поэтому что-то посоветовать взамен я не могу :(
← →
{RASkov} © (2008-02-21 10:39) [39]> [37] Сергей М. © (21.02.08 10:32)
Ну этож вообще очевидно и все просто.... неужели автор сам до этого не додумался.... :))
← →
Сергей М. © (2008-02-21 13:34) [40]
> {RASkov} © (21.02.08 10:39) [39]
> неужели автор сам до этого не додумался
Похоже, автор желает по возможности осложнить жизнь юзеру, заставив его ручками формировать ком.строку, держа в голове всю эту командно-параметрическую шнягу. Типа раз уж мне, программеру, геморрой с этой ком.строкой, то пусть уж, мол, и юзер помучается - мол, стадать от придуманного геморроя вдвоем как-то веселей.
Страницы: 1 2 вся ветка
Текущий архив: 2008.03.23;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.02 c