On-line: Oskar_AAA, гостей 3. Всего: 4 [подробнее..]
АвторСообщение





Пост N: 249
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 04.02.20 10:33. Заголовок: оператор IN


Подскажите как можно реализовать препроцессором конструкцию вида Var IN (id1,id2,....idN) что бы возвращала значения Var==Id1.or.Var==Id2.or.....Var==IdN Причем что бы в скобках оператора можно было использовать так же и массив значений

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 13 [только новые]


Администратор




Пост N: 3911
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.02.20 11:22. Заголовок: Можно просто использ..


Можно просто использовать ASCAN:

ASCAN({id1,id2,....idN}, Var) # 0

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 250
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 04.02.20 11:59. Заголовок: Pasha пишет: ASCAN(..


Pasha пишет:

 цитата:
ASCAN({id1,id2,....idN}, Var) # 0


тоже вариант, но хотелось бы транслировать препроцессором, так проще читается код, как работает препроцессор очень смутно понимаю )

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3912
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.02.20 12:32. Заголовок: Вряд ли возможно пре..


Вряд ли возможно препроцессором транслировать в конструкцию с .or.
Можно написать функцию, которая бы принимала параметры и выдавала бы .or., и эту функцию вызывать средствами препроцессора.
А зачем ее писать, если уже есть ascan ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 252
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 04.02.20 18:05. Заголовок: Pasha пишет: и эту ..


Pasha пишет:

 цитата:
и эту функцию вызывать средствами препроцессора



Да, именно это, хотелось бы научиться транслировать разные текстовые конструкции в функции и передавать ей параметры описанные по правилам, после ключевых слов параметры подставляются туда куда надо, особенно если у функции множество принимаемых параметров...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3020
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.02.20 20:36. Заголовок: MIKHAIL пишет Да, им..


MIKHAIL пишет
 цитата:
Да, именно это, хотелось бы научиться транслировать


см. MiniGu\Include\i_*.ch там много примеров. Такой
 
#translate MemVar . <AreaName> . <FieldName> => MemVar<AreaName><FieldName>
///////////////////////////////////////////////////////////////////////////////
// STANDARD BROWSE
///////////////////////////////////////////////////////////////////////////////

#command @ <row>,<col> BROWSE <name> ;
[ ID <nId> ] ;
[ <dummy1: OF,PARENT,DIALOG> <parent> ] ;
[ WIDTH <w> ] ;
[ HEIGHT <h> ] ;
[ HEADERS <headers> ] ;
[ WIDTHS <widths> ] ;
[ WORKAREA <workarea> ] ;
[ FIELDS <Fields> ] ;
[ VALUE <value> ] ;
[ FONT <fontname> ] ;
[ SIZE <fontsize> ] ;
[ <bold : BOLD> ] ;
[ <italic : ITALIC> ] ;
[ <underline : UNDERLINE> ] ;
[ <strikeout : STRIKEOUT> ] ;
[ TOOLTIP <tooltip> ] ;
[ BACKCOLOR <backcolor> ] ;
[ DYNAMICBACKCOLOR <dynamicbackcolor> ] ;
[ DYNAMICFORECOLOR <dynamicforecolor> ] ;
[ FONTCOLOR <fontcolor> ] ;
[ ON GOTFOCUS <gotfocus> ] ;
[ ON CHANGE <change> ] ;
[ ON LOSTFOCUS <lostfocus> ] ;
[ ON DBLCLICK <dblclick> ] ;
[ <edit : EDIT> ] ;
[ <inplace : INPLACE> ] ;
[ <append : APPEND, ALLOWAPPEND> ] ;
[ INPUTITEMS <inputitems> ] ;
[ DISPLAYITEMS <displayitems> ] ;
[ ON HEADCLICK <aHeadClick> ] ;
[ <d2: WHEN, COLUMNWHEN> <aWhenFields> ];
[ <d3: VALID, COLUMNVALID> <aValidFields> ];
[ VALIDMESSAGES <aValidMessages> ] ;
[ READONLY <aReadOnly> ] ;
[ <lock: LOCK> ] ;
[ <Delete: DELETE, ALLOWDELETE> ] ;
[ <style: NOLINES> ] ;
[ IMAGE <aImage> ] ;
[ JUSTIFY <aJust> ] ;
[ <novscroll: NOVSCROLL> ] ;
[ HELPID <helpid> ] ;
[ <break: BREAK> ] ;
[ COLUMNSORT <columnsort> ] ;
[ HEADERIMAGE <aImageHeader> ] ;
[ <doublebuffer: PAINTDOUBLEBUFFER> ] ;
[ <notabstop: NOTABSTOP> ] ;
[ ON INIT <bInit> ] ;
=>;
_DefineBrowse ( <"name"> , ;
<"parent"> , ;
<col> , ;
<row> , ;
<w> , ;
<h> , ;
<headers> , ;
<widths> , ;
<Fields> , ;
<value> , ;
<fontname> , ;
<fontsize> , ;
<tooltip> , ;
<{change}> , ;
<{dblclick}> , ;
<aHeadClick> , ;
<{gotfocus}> , ;
<{lostfocus}>, ;
<"workarea"> , ;
<.Delete.>, ;
<.style.> , ;
<aImage> , ;
<aJust> , ;
<helpid> , ;
<.bold.> , ;
<.italic.> , ;
<.underline.> , ;
<.strikeout.> , ;
<.break.> , ;
<backcolor> , ;
<fontcolor> , ;
<.lock.> , ;
<.inplace.> , ;
<.novscroll.> , ;
<.append.> , ;
<aReadOnly> , ;
<aValidFields> , ;
<aValidMessages> , ;
<.edit.> , ;
<dynamicforecolor> , ;
<dynamicbackcolor> , ;
<aWhenFields>, ;
<nId>, ;
<aImageHeader>, ;
<.notabstop.> , ;
<inputitems> , ;
<displayitems> , ;
<.doublebuffer.> , <columnsort> , <bInit> )


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3913
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.02.20 21:19. Заголовок: можно так: #transla..


можно так:

#translate <var> IN <values,...> => ASCAN({ <values> }, <var>) # 0

тогда конструкция

if n1 IN 1,2,3

транслируется в оператор:

if ASCAN({ 1,2,3 }, n1) # 0

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3021
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.02.20 10:27. Заголовок: Можно чуть усилить, ..


Можно чуть усилить, получая номер позиции сразу
 
#translate <var> IN <values,...> [ TO <var2> ] => ASCAN({<values>}, <var> ) # 0 ;;
[ <var2> := ] ASCAN({<values>}, <var> )
тогда
p := -1
b := 30
c := .F.
a := {"111","222","333","444","555" }
If b IN 10,20,30,40,50
c := .T.
IF b IN 10,20,30,40,50 TO p
ENDIF
EndIf
? 'b =', c, p, iif( p > 0, a[ p ], "" )


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 253
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 06.02.20 13:04. Заголовок: SergKis пишет: ? &#..


SergKis пишет:

 цитата:
? 'b =', c, p, iif( p > 0, a[ p ], "" )



Кстати, никогда не мог понять чем if() отличается от iif() ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7161
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.02.20 13:35. Заголовок: MIKHAIL пишет: Кста..


MIKHAIL пишет:

 цитата:
Кстати, никогда не мог понять чем if() отличается от iif() ?


это одно и тоже



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3022
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.02.20 13:49. Заголовок: MIKHAIL пишет:Кстати..


MIKHAIL пишет:
 цитата:
Кстати, никогда не мог понять чем if() отличается от iif() ?


Использую iif(...) по привычке и т.к. используемые редакторы подсвечивают if и не подсвечивают iif.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3914
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.02.20 14:35. Заголовок: Отключаю FarColorer,..


Отключаю FarColorer, так как с ним редактор чуть подтормаживает, а это чуть некомфортно.
Вбиваю if, так как на одну букву меньше вбивать. Тоже привычка

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3025
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.02.20 14:55. Заголовок: Pasha пишет Отключаю..


Pasha пишет
 цитата:
Отключаю FarColorer


Тогда пропадает подсветка и возрастает нагрузка на глаза, надо выглядывать
IF ...
ELSEIF ...
...
ENDIF
и т.д.
Akelpad, Notepad3 не тормозят с подсветкой, может, при большом тексте, hbedit подтормаживает чуть - это мелочь.

IF .. IN ... можно расширить для массива и Hash
 
#xtranslate <var> INA <val> [ TO <var2> ] => iif( ISHASH( <val> ), hb_HPos( <val>, <var> ), ASCAN( <val>, <var> ) ) # 0 ;;
[ <var2> := ] iif( ISHASH( <val> ), hb_HPos( <val>, <var> ), ASCAN( <val>, <var> ) )


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 254
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 10.02.20 11:06. Заголовок: Pasha пишет: #trans..


Pasha пишет:

 цитата:
#translate <var> IN <values,...> [ TO <var2> ] => ASCAN({<values>}, <var> ) # 0 ;;
[ <var2> := ] ASCAN({<values>}, <var> )



вступает в конфликт с for each, нужно добавить If

#translate if <var> IN <values,...> => if ASCAN({<values>}, <var> ) # 0

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 249
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет