Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Вниз

разбор строка   Найти похожие ветки 

 
Максим   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.008 c
15-1201868952
Sergey Masloff
2008-02-01 15:29
2008.03.23
OracleXe - скормить dump от 9-ки


11-1186338197
Vedun
2007-08-05 22:23
2008.03.23
Выделенные ячейки в mdvXLGrid


4-1178624707
Glu
2007-05-08 15:45
2008.03.23
Дата BIOS в WinXP x64


10-1143801664
marcel
2006-03-31 14:41
2008.03.23
Журнализирование в сервере приложений


9-1168463037
@!!ex
2007-01-11 00:03
2008.03.23
Оптимизация.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский