powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как проверить на существованя массив ?
17 сообщений из 17, страница 1 из 1
Как проверить на существованя массив ?
    #40065065
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня.

Возник вопрос по проверки на существования несколько
локальных массивов перебирая в цикле.
Массивов по сути 8, но неизвестно сколько сформируются по запросу.
Просится использовать конкатенацию, но так нельзя. Косвенное тоже почему то с ошибкой
Код примерно такой
Код: javascript
1.
2.
3.
4.
5.
6.
7.
 f Vue=1:1:8 d
 . ; s VueArr="ByRef"_Vue
 . i $d("ByRef"_Vue) d  // ЗДЕСЬ ?????
 . . ; m ^eeeYES=VueArr
 . . s node="",cik=""
 . . f cik=1:1 s node=$o(VueArr(node)) q:node=""  d
 . . . s VueRet("P"_Vue,cik)=VueArr(node)


Спасибо
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065073
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$data(@("ByRef"_Vue))
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065080
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Спасибо большое !
где-то так:
Код: javascript
1.
2.
3.
4.
5.
6.
f Vue=1:1:8 d
 . i $data(@("ByRef"_Vue))  d
 . . m eeeYES=@("ByRef"_Vue)
 . . s node="",cik=""
 . . f cik=1:1 s node=$o(eeeYES(node)) q:node=""  d
 . . . s VueRet("P"_Vue,cik)=eeeYES(node)
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065113
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , зачем ты делаешь
Valeriu

Код: javascript
1.
 . . m eeeYES=@("ByRef"_Vue)


?
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065114
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант...

Код: javascript
1.
2.
3.
4.
5.
6.
f Vue=1:1:8 d
 . s name="ByRef"_Vue
 . q:'$d(@name)
 . s node=""
 . f cik=1:1 s node=$o(@name@(node)) q:node=""  d
 . . s VueRet("P"_Vue,cik)=@name@(node)


Оно конечно и вот это
Код: javascript
1.
s VueRet("P"_Vue,cik)=@name@(node)


не совсем понятно зачем...
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065115
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , и зачем делать разные имена массивам?
Ведь можно использовать одно имя и разделять данные уже внутри...

Код: javascript
1.
2.
3.
ByRef(1)
...
ByRef(8)


тогда и обход таких данных будет более естественным для М.
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065139
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Я получаю эти массивы по ссылке из другой подпрограммы,
может быть с любой области и т д
Т.е. (.ByRef1,.ByRef2, ...., .ByRef8)
Здесь разбираю, пакую Json и отправляю клиенту в Vue.js
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065157
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , постоянное вычисление имени узла в цикле
Код: javascript
1.
"P"_Vue


так же не есть хороший тон...
Такое лучше вычислить заранее и потом просто использовать.
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065179
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Я конечно еще буду пилить код, это все было на быструю руку.
Было самому интересно как это выстрелит.
Я сделал универсальный модуль с 8 переменными (можно конечно и 255 ;) )
Например на стороне пользователя (ВЕБ клиент) вызывает любую рутину,
HTML + Vue
Код: html
1.
<select v-model="txtSubd" class="form-control" data-width='false' data-dropupAuto='false' @change="Do('zs1^EXOUTPUT')">


M+FCGI из любой области и получает готовый результат. В данном случае два .ByRef1,.ByRef2 --> Ret и Ret1
Это просто пример тестовый
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
zs1(rc1,Ret,Ret1)
 new (rc1,Ret,Ret1,tx) ;; 
 s (tab,nr)="",ceh=rc1,ttt="",rrr="",kkk=""
 f  s tab=$o(^ZS1(ceh,0,tab)) q:tab=""  d
 . s cont=^ZS1(ceh,0,tab),nm=$p(cont,":",1),cod=$p(cont,":",2),sal=$p(cont,":",3)
 . s nr=nr+1,^aRet(nr)=nr_"/"_nm_"/"_cod_"/"_sal,^aRet1(nr)=nr_"/"_nm_"/"_cod_"/"_sal
 m Ret=^aRet,Ret1=^aRet1
 q
 ;;
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065205
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , а как ты передаешь параметры М-функции?
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065208
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu

Код: javascript
1.
 m Ret=^aRet,Ret1=^aRet1


Для чего эти "мержи"?
Пиши сразу в Ret и Ret1...
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065213
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , как на мой взгляд - ты сильно говнокодишь...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
zs1(rc1,Ret,Ret1)
	new (rc1,Ret,Ret1,tx) ;; 
	s nr=0
	s ceh=rc1
	s tab=""
	f  s tab=$o(^ZS1(ceh,0,tab)) q:tab=""  d TAB
	m Ret=^aRet,Ret1=^aRet1
	q
TAB	
	n val
	s val=^ZS1(ceh,0,tab)
	s val=$p(cont,":",1,3)
	s val=$tr(val,":","/")
	s nr=nr+1
	s val=nr_val
	s ^aRet(nr)=val
	s ^aRet1(nr)=Val
	q
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065217
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Для чего эти "мержи"?
Пиши сразу в Ret и Ret1

Я копипастил просто игрался. Я merge использую очень редко(почти не использую)
только когда тестить если что то..
а как ты передаешь параметры М-функции?
Есть специальная глобальная функция у меня
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
cmdDo(input)
 ;;
q:'$$SID^%FCGI()  s SID=%fcgi("i","header","SID")
 i SID="" g exit
 n flag,rtn,head,cik,i,nprm,array,data,ByRef
 s head=$p(input,"[{}]",1)  ; Head data
 s rtn=$p(head,"~",1)       ; RoutineLabel^RoutineName
 s nprm=$p(head,"~",2)      ; nr.parameters
 s flag=$p(head,"~",3)      ; flag
 ;;
 ;; Passing parameters ByRef label^routine(.var1,.var2, ... .var8) return Array !!!
 s inpar="" ; variabila pentru a primi input parameter start 1 (.ByRef1,.ByRef2 ... .ByRef8)
 s gtmbuild("gtmstring")=rtn_"("
 f i=2:1:nprm+1 d ; de pe locul 2  - pe 1 se afla head !!!
 . s gtmbuild("ByRef",i)=$p(input,"[{}]",i)
 . s inpar=inpar+1,ByRef=".ByRef"_inpar,gtmbuild("gtmstring")=gtmbuild("gtmstring")_(ByRef_","),passing="ByRef"_inpar,@passing=gtmbuild("ByRef",i)
 s $e(gtmbuild("gtmstring"),$l(gtmbuild("gtmstring")))=")"
  i nprm=0 s gtmbuild("gtmstring")=rtn ; with no parameter in function
 i flag="R" d 

...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065218
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как на мой взгляд - ты сильно говнокодишь
скопировал первый попавший из старых кодов ;)
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065222
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu , зачем ты параметры по ссылке передаешь?
Я вот проработал довольно долго в М-среде... И даже надобности такой в этом не имел.

Записал данные в глобал (если их много), а имя того глобала передал параметром в процедуру/функцию...
Она там все и прочитает.

Ты ведь даже не меняешь содержимое переданного...
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065228
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Долго объяснять.
Мне удобнее было в mixine написать одну единственную функцию,
чем куча функций. А это еще остался подход, когда использовали
MSM-Activate. Не очень хочется весь говнокод перелопатить.
Вызов такой же, ничего менять не надо. Где-то так.
...
Рейтинг: 0 / 0
Как проверить на существованя массив ?
    #40065261
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriu
Не очень хочется весь говнокод перелопатить.

В противном случае он (говнокод) начинает размножаться.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как проверить на существованя массив ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (9): Анонимы (6), Yandex Bot, Bing Bot 1 мин., Google Bot 3 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]