:: Visual Foxpro, Foxpro for DOS
!EMPTY и 0
ProbaSP

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
Привет всем!
помогите дописать условие:

IF !EMPTY(thisform.text1.Value)
1 команда
ELSE
2 messagebox('нет значения',0,'Внимание!')
ENDIF

столкнулся с тем что в "text1.Value" бывает "0"(ноль) и тогда нужно выполнить команду 1.
а выполняется 2.
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
Alsim

Сообщений: 3636
Откуда: Екатеринбург
Дата регистрации: 17.11.2004
IF thisform.text1.Value <> 0
если поле числовое конечно
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> IF !EMPTY(thisform.text1.Value)
> в "text1.Value" бывает "0"(ноль) и тогда нужно выполнить команду 1
IF написан же наоборот - !EMPTY(), т.е если НЕ НОЛЬ, то...выполнить команду 1
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
ProbaSP

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
Это проверялось ввел ли пользователь в textbox какое нибудь значение или нет. Пусто или нет.
значит надо вообще условие переписать.
если "пусто" то команда 2, а если 0 или больше то команда 1.
как-то так.
спасибо.
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
ProbaSP
Это проверялось ввел ли пользователь в textbox какое нибудь значение или нет. Пусто или нет.
значит надо вообще условие переписать.
если "пусто" то команда 2, а если 0 или больше то команда 1.
как-то так.
спасибо.

Нужно просто перечислить в условии варианты возможных типов переменной с соответствующими значениями.
Наподобие:
eValue = thisform.text1.Value
IF VARTYPE(eValue)="C" AND !EMPTY(eValue) OR VARTYPE(eValue)="N" AND eValue<>0
1 команда
ELSE
2 messagebox('нет значения',0,'Внимание!')
ENDIF

Если сначала не проверять тип переменной при сравнении, а просто сравнивать ее с разными типами - в условии будет вылезать ошибка.
Скажем:
IF !EMPTY(eValue) OR eValue<>0
даст такую ошибку при символьном типе переменной.

При наличии же в условии AND - всегда сначала идет проверка для первого операнда (слева от AND). И если это дает .F. - второй операнд попросту пропускается, а проверка переходит дальше к следующему условию, стоящему за OR. Т.е. ошибки не возникает.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/2 positive
Re: !EMPTY и 0
ProbaSP

Сообщений: 94
Откуда: Урал
Дата регистрации: 28.01.2016
Crispy
Crispy
Спасибо. Разобрался.

вместо условия
Crispy
eValue<>0

поставил
eValue>=0

Все работает как мне нужно.

P.S. Вы так все разжевали.
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Нужно просто перечислить в условии варианты возможных типов переменной с соответствующими значениями.
Наподобие:

eValue = thisform.text1.Value
IF VARTYPE(eValue)="C" AND !EMPTY(eValue) OR VARTYPE(eValue)="N" AND eValue<>0
1 команда
ELSE
2 messagebox('нет значения',0,'Внимание!')
ENDIF


Тип поля, и, соответственно, той переменной определяет программист, а не пользователь тем, что он ввел.

ProbaSP
Все работает как мне нужно.

Вы хотите сказать, что таким образом отличаете "пусто" от нуля для числового значения?
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Crispy
Если сначала не проверять тип переменной при сравнении, а просто сравнивать ее с разными типами - в условии будет вылезать ошибка.
В каком-то системном/универсальном коде, конечно же проверять тип и ветвить логику надо. В конкретном прикладном - всегда известно какого типа переменная будет. Если НЕ известно - значит разработчик в другом месте накосячил и это надо исправлять там.
Автору темы.
Для числового типа 0 и "пустота" эквивалентны что при сравнении на =, <> что для функции EMPTY(). При том "пустота" будет видна лишь если речь идёт про поле курсора, или если для текстбокса задан специальный формат "скрывать ноль".
Для строкового типа же "пустота" (как нулевая длина текста, так и текст из одних пробелов) и "0" это совершенно разные значения, и "0" это конечно же не пустое значение. Впрочем, про это написано в хелпе к функции EMPTY()


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
(Только идиот непрогер посчитает 0 и "0" одинаковыми состояниями переменной, и про EMPTY() фоксовое ничего плохого не скажу, учить надо английский, русофилы !
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
(Только идиот непрогер посчитает 0 и "0" одинаковыми состояниями переменной, и про EMPTY() фоксовое ничего плохого не скажу, учить надо английский, русофилы !

var a = 0;
var b = "0";
console.log(a==b);
Открой девелоп-консоль браузера (F12, даже в IE) и вставь туда этот код


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
"Дебилы бл..." (с = Лавров)
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
Igor Korolyov
var a = 0;
var b = "0";
console.log(a==b);
Открой девелоп-консоль браузера (F12, даже в IE) и вставь туда этот код

Игорь, но там же правильно писать так:
var a = 0;
var b = "0";
console.log(a===b);
Ratings: 0 negative/0 positive
Re: !EMPTY и 0
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Леонид, я в курсе

Но таки === это "эквивалентность", а == это "равенство". И в плане "одинаковое состояние содержимое переменной" у == есть своя область применения. Равно как и, к примеру, у выражения !!some - или, по фоксовому, NOT NOT some
Факт в том что в JS таки есть вот такой "крайне странный" механизм сравнения. В плане "безтипизации" и "автопреобразования типов" JS пошёл ещё дальше фокса. А его разделение (для условных выражений) "логических" конструкций на соврешенно разные по сути true, truthy, false и falsy может сломать мозг кому угодно Хуже этого лишь концепция функция-как-объект, пожалуй


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика