Страница 2 из 3

СообщениеДобавлено: 21 янв 2005, 12:35
Дмитрий Иванов
Музалёв Николай писал(а):
...тупо...из книжки...

Хм... книжка должна была бы называться NW 3.11. Концепции. Приложение А. Команды процедуры регистрации.
В соотв. с этими рекоменндациями предлагаю вариант ДВА:
Код: Выделить всё
if "%CN" = VALUE "MNS" then
write " MNS OK"
end


Спасибо щас попробую, а книжка Гаскина/Гарбара стр. 222... :)

отчет :)

СообщениеДобавлено: 21 янв 2005, 13:11
Dm
Я разобрался со свими скриптами. Все теперь ОК.

Всем участникам обсуждения огромная благодарность!

Воспользовался рецептом :
Типа так
Map K:=.TNT_Srv5_PROJECT.TNT:
обратив внимание на точку впереди.
Очень помогает при разных контекстах.


Действительно, система ругается на строчку BEGIN, а в остальном - все в порядке.
Еще раз спасибо всем :)

СообщениеДобавлено: 21 янв 2005, 13:20
Станислав Дронкин
У меня работает конструкция

If OS="WIN98" THEN
.........
End

Я думаю, что это должно сработать аналогичным образом и в случае с CN

А я продолжаю ловить глюки...

СообщениеДобавлено: 21 янв 2005, 13:34
Дмитрий Иванов
А что вы скажите на это:
Код: Выделить всё
cls
write "%CN"                               /- возвращаю значение переменной/
if "%CN" = VALUE "USER4" then  /- условие для write - это пользователь USER4/
write " OK"
else                                          /- если условие false то "ggg"/
write " ggg"
end


это из окошка регистрации:
Код: Выделить всё
admin    /- вернулось %CN/
OK        /- сработало первое, несмотря на то, что условие false.../

И под кем бы не заходил, проходит по первому :shock:
Что еще можно предпринять ?

Станислав Дронкин писал(а):У меня работает конструкция

If OS="WIN98" THEN
.........
End

Я думаю, что это должно сработать аналогичным образом и в случае с CN
А вот с CN и %1 при таком синтаксисе выдает ошибку...

Так, вроде разобрался...

СообщениеДобавлено: 21 янв 2005, 14:02
Дмитрий Иванов
Работает:
Код: Выделить всё
cls
if "%CN" = "USER4" then
write " OK"
else
write " ggg"
end


"VALUE" перед значением не надо!
Всем спасибо!

Re: отчет :)

СообщениеДобавлено: 21 янв 2005, 14:08
Андрей Тр. aka RH
Dm писал(а):Я разобрался со свими скриптами. Все теперь ОК.
Странно .. тогда это не скрипты не выполняются, да еще в зависимости от контекста пользователя, а команда МАР в данном случае написана неверно. Это ж RTFM чистой воды :) Все равно в окошке выполнения скрипта, которое мы тут уже хором просили, в этом случае должна быть ОШИБКА о невыполнении данной команды. А BEGIN, по-моему, в скриптовых командах вообще отсутствует ( END - есть ).

Дмитрий Иванов

А шо такое есть VALUE "USER4" ?

P.S. А .. понятно :) RTFM

Дык, то и есть, что советовали выше...

СообщениеДобавлено: 21 янв 2005, 14:29
Дмитрий Иванов
Андрей Тр. aka RH писал(а):Дмитрий Иванов

А шо такое есть VALUE "USER4" ?

P.S. А .. понятно :) RTFM


Возможно я это не так понял конечно...
В соотв. с этими рекоменндациями предлагаю вариант ДВА:
Код: Выделить всё
if "%CN" = VALUE "MNS" then
write " MNS OK"
end


З.Ы. И я, блин, READ уже всякие там F... M... со вчерашнего дня вдоль и поперек... :)

СообщениеДобавлено: 21 янв 2005, 15:04
Андрей Тр. aka RH
Дык, то и есть, что советовали выше...
Не знаю, я VALUE в логин скриптах не припоминаю .. равно как и в доке не нашел. Может, те "рекоменндации" для 3.12, и там оно как-то все было .. не так ? По синтаксису в IF .. THEN сравнивается непосредственно со значением. А с %CN и %1 - может, попробовать писать их в двойных кавычках ?

СообщениеДобавлено: 21 янв 2005, 15:58
Дмитрий Иванов
Андрей Тр. aka RH писал(а):
Дык, то и есть, что советовали выше...
Не знаю, я VALUE в логин скриптах не припоминаю .. равно как и в доке не нашел. Может, те "рекоменндации" для 3.12, и там оно как-то все было .. не так ? По синтаксису в IF .. THEN сравнивается непосредственно со значением. А с %CN и %1 - может, попробовать писать их в двойных кавычках ?


Дык, разобрался-ж уже, чит. выше. СПС всем. :)

хм... вот задался я еще одним вопросом...

СообщениеДобавлено: 21 янв 2005, 17:48
Дмитрий Иванов
А можно ли в логин скрипте создавать свои переменные (строковые) и присваивать им значения, что бы потом использовать в стандартных конструкциях.
Я конечно сразу стал сомневаться по этому поводу, но все-таки...

Спасибо...

СообщениеДобавлено: 21 янв 2005, 18:01
Музалёв Николай
По поводу VALUE прошу прощения за введение в заблуждение: оно используется при операциях над числительными. Отсутствие этого оператора означает, что операции (сравнения в частности) идут над строками.
По поводу своих переменных.
Предполагается, что по SET-оператору вы можете напихать в свою локальню систему чего хотите и потом оперировать этими переменными, заключив их в угловые скобки. Указанное правило предполагало DOS-перемменные, но никто не мешает проверить и в ВИНде.
Если же предполагаются просто локальные переменные типа счетчиков циклов и т.д. , то тогда так:
Код: Выделить всё
set x = "1"
perexod:
...чеготоДелаемТут....
set x = <x> + "1"
if <x> is less then value "10" then goto perexod

СообщениеДобавлено: 21 янв 2005, 18:40
Андрей Тр. aka RH
Дмитрий, вот если бы Вы сходили по ссылочке ( RTFM ), что я привел выше, то не задавали бы подобных вопросов :) Там примерно в середине - где про GOTO приведен Example по использованию DOS-переменных ( в угловых скобках ). А далее про команду SET написано подробнее, как этими переменными пользоваться, присваивать им значения и т.д. Доку ж надо не только пролистывать, но еще и читать иногда.

Кстати, Николай, в том же примере ( в доке ) переменная Х ( численная ) в IF .. THEN используется безо всякой VALUE :
Код: Выделить всё
SET X=1
AGAIN:
SET X=<X> + 1
;see compound strings for this
WRITE <X>
IF <X> < 9 THEN GOTO AGAIN

СообщениеДобавлено: 21 янв 2005, 19:03
Дмитрий Иванов
НИКОЛАЙ
Огромное СПАСИБО. Буду пробовать.

АНДРЕЙ
Ну что Вы все RTFMом тыкаете. Форум-то для чего? Ну не глупые же я совсем вопросы задаю.
А бывают случаи, когда хочется выиграть время и сделать что-то побыстрее. Вот как я сейчас сижу и переписываю огромный Login Script. Пол дня было потеряно на поиски синтаксиса %CN, а про то что это дело в кавычки надо брать, ну ни где я не нашел (даже в книге у Гаскина без), только здесь Николай подсказал, еще раз спасибо. И сам бы не догадался (когда-то на делфи писал... стереотипы, блин)...

СообщениеДобавлено: 22 янв 2005, 23:25
Владимир Горяев
Дмитрий Иванов
Не переживай. В нвадмине F1 нажмешь - там все с примерами, хелп короче(ну или RTFM) :)
В мапах лучше использовать UNC пути...RTFM. :lol:

СообщениеДобавлено: 24 янв 2005, 13:35
Музалёв Николай
Кстати, о примерах....
Коллега С.Дубров, было дело - макакал меня мордой в то, что вчерась съел, за то, что я выступал в форуме без проверки своих советов - ветераны-соколовцы помнят...
Ну дык вот - с тех пор я внял!
Приведенный ( в доке )
пример не работает:
...примере переменная Х ( численная ) в IF .. THEN используется безо всякой VALUE :
Код: Выделить всё
SET X=1
AGAIN:
SET X=<X> + 1
;see compound strings for this
WRITE <X>
IF <X> < 9 THEN GOTO AGAIN 

Не работает, кстати не только по логике, но даже по синтаксису! ("Дети! Кто это написал на доске это слово? Это очень плохое слово, дети...")

А вот мой пример работает именно так, как надо:
Код: Выделить всё
set  x =  "1"
again:
set x = <x> + "1"
;see compound strings for this
WRITE <x>
IF <x> < VALUE "19" THEN GOTO AGAIN

(Значение константы сравнения увеличено, что бы отстроиться от совпадения строки и значения)
Кстати, лучше было бы его записать так:
Код: Выделить всё
set  x =  "1"
again:
;see compound strings for this
WRITE <x>
set x = <x> + "1"
IF <x> < VALUE "19" THEN GOTO AGAIN

Желающие могут попробовать оба варианта, как с параметром VALUE, так и без:
18 сравнений с параметром VALUE., без параметра VALUE - только одно сравнение.
(Опытная пощадка: реальная сеть 2*NW51+6, вин2к рус, кл483+2конс, эквивалент админу.)

РЕЗЮМ(с): Дети, проверяйте доки практикой!