powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / помогите начинающему с глобалами
25 сообщений из 48, страница 1 из 2
помогите начинающему с глобалами
    #38254271
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть глобал:
1: ^B(1) = "Team"
2: ^B("ghgjghj") = 54
3: ^B("ghgjghj",2) = "bob"
4: ^B("ghgjghj",3) = "port"
5: ^B("1232") = "red"
6: ^B("1232",3) = "point"
7: ^B("1232",6) = "yellow"
и т.д.........

задача вывести все значения узлов (через терминал) вниз по дереву, начиная с определенного задаваемого значения
допустим с "ghgjghj"
результат примерно таков:

узел "ghgjghj" = 54
узел 2 = "bob"
узел 3 = "port"
узел "1232" = "red"
узел "1232" = "point"
узел "1232" = "yellow"
и т.д.........
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254291
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно верно.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254343
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бредятина, спасибо огромное
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254350
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пьян по случаю ДР коллеги, но мне кажется, что причина в том, что я ничего не понял во втором и третьем посте, не в этом.
А ТС - используйте $query иили $order.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254353
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nurekil,

В данном случае лучше использовать функцию $query

 s gl=$na(^B) ; - Глобаль
 s i="ghgjghj" ; - Стартовый индекс
 f  s i=$q(@gl@(i)) q:i=""  w "Узел: "_$na(^(i))_" = "_$g(^(i))
 ; не забываем про 2-а пробела после  for  и после  quit  по условию
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254372
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvA-N, по непонятным мне причинам условие выхода из цикла q:i="" не выполняется, поменял его на q:i=" " результат тот же

пробовал вводить различные начальные точки i - вывод работает
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254387
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверьте должно быть два пробела между q:i="" и w

Хотя если там нет 2-х пробелов, то скрипт должен вылетать по АНДЕФУ

Если не получится $query то можно через $order реализовать:

s gl=$na(^B) ; - Глобаль
s i="ghgjghj" ; - Стартовый индекс
f s i=$o(@gl@(i)) q:i="" w "Узел "_$na(^(i))_" = "_$g(^(i)) s k="" f s k=$o(@gl@(i,k)) q:k="" w "Узел "_$na(^(k))_" = "_$g(^(k))

Если глубина глобали увеличиться, то соответственно нужно будет добавить еще один цикл.

P.S. Мне приходилось на М-языке разрабатывать/сопровождать много разных приложений и программ из разных областей: банки, бухгалтерия, документооборот, биллинговые системы, интерфейсы разных уровней, писал архиватор на MSM и прочие задачи. И я абсолютно уверен, что если в скрипте приходится использовать функцию $query, то это первый признак того, что структура базы разработана коряво. Хотя не исключаю, что существуют исключения.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254392
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу скрипт напрямую в редакторе форума, поэтому ошибочку допустил - там во втором цикле в quit по условию нужно указать переменную k Модератор: Исправлено
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254423
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvA-N, практически работает, в результате работы (при начальной точке "ghgjghj") выдает пустую строку, потому что дальше ничего нет, но хотелось бы чтобы выводило включительно начиная с ("ghgjghj")

при начальной точке "1232" идет вниз по дереву не включая "1232"-глобал

1: ^C(1) = "Team"
2: ^C(1232) = "red"
3: ^C(1232,3) = "point"
4: ^C(1232,6) = "yellow"
5: ^C("ghgjghj") = 54
6: ^C("ghgjghj",1) = "bob"
7: ^C("ghgjghj",2) = "port"
8: ^C("ghgjghj",3) = "port"
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254430
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все правильно, цифры всегда вначале списка, если нужно включительно с конкретного индекса начинать, определяем стартовый индекс следующим образом:

s i="ghgjghj",i=$o(@gl@(i),-1) ; - Стартовый индекс

если стартовый индекс указать "" то цикл переберет всю глобаль.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254438
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvA-N, в этом то и вся соль,
если в качестве начальной точки водить s i="ghgjghj" , то результат выполнения[img=[img=]]
видимо все дело в то что нач. индекс строка, а не число

не знаешь случаем что нужно сделать, чтобы хавало строку??
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254448
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите внимательно на мой предыдущий пост. Все должно работать.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254473
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvA-N, s i="ghgjghj",i=$o(@gl@(i),-1) ; - Стартовый индекс
результат таков
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254474
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nurekil,
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254479
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvA-NПосмотрите внимательно на мой предыдущий пост. Все должно работать.
результат следующий:

USER>Do ^points

Point ^C(1232) = red
Point ^C(1232,3) = point
Point ^C(1232,6) = yellow
Point ^C(1) = Team
USER>
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254487
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то не так. Покажите текст программы.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254490
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvA-N,
S ^C(1)="Team"
S ^C(1232)="red"
S ^C(1232,3)="point"
S ^C(1232,6)="yellow"
S ^C("ghgjghj")=54
S ^C("ghgjghj",1)="bob"
S ^C("ghgjghj",2)="port"
S ^C("ghgjghj",3)="port"

s gl=$na(^C)
s i="ghgjghj"
f s i=$o(@gl@(i),-1) q:i="" w !, "Point "_$na(^(i))_" = "_$g(^(i)) s k="" f s k=$o(@gl@(i,k)) q:k="" w !, "Point "_$na(^(k))_" = "_$g(^(k))
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254492
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы не так меня поняли, должно быть следующим образом (разбил детально с комментариями):

s gl=$na(^C)
s i="ghgjghj" ; - Стартовый индекс
s i=$o(@gl@(i),-1) ;- Предыдущее значение от стартового индекса
f s i=$o(@gl@(i)) q:i="" w !, "Point "_$na(^(i))_" = "_$g(^(i)) s k="" f s k=$o(@gl@(i,k)) q:k="" w !, "Point "_$na(^(k))_" = "_$g(^(k))
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254502
nurekil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvA-N,

спасибо все заработало, выводит включительно с начальной точкой

P.S. читал в методичке, что Функция$O((…),-1) – обратный относительно функции$O[rder] проход по уровням дерева
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254512
AvA-N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все правильно в методичке написано. Вообще $order - это одна из основных функций. Если вы планируете работать с М-системами, то необходимо уметь читать текст, понимать что происходит и т.д. Все придет с опытом.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254720
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AvA-Nf s i=$o(@gl@(i)) q:i="" w "Узел "_$na(^(i))_" = "_$g(^(i)) s k="" f s k=$o(@gl@(i,k)) q:k="" w "Узел "_$na(^(k))_" = "_$g(^(k))

Если глубина глобали увеличиться, то соответственно нужно будет добавить еще один цикл.

Рекурсия спасёт отца русской демократии ;)
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254754
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.Рекурсия спасёт отца русской демократии ;)
Рекурсия - фигня!

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	n
	s ^B(1) = "Team"
	s ^B("ghgjghj") = 54
	s ^B("ghgjghj",2) = "bob"
	s ^B("ghgjghj",3) = "port"
	s ^B("1232") = "red"
	s ^B("1232",3) = "point"
	s ^B("1232",6) = "yellow"
	s beg="ghgjghj"
	s beg=$na(^B(beg))
	s beg=$q(@beg,-1)
	f  s beg=$q(@beg) q:beg=""  w !,$qs(beg,$ql(beg)),"=",@beg
	q


Нужно использовать правильные функции...
Результат работы

Код: vbnet
1.
2.
3.
ghgjghj=54
2=bob
3=port
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254849
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно использовать правильные функции...
Так то да, но вроде как у ТС что-то не задолось с использования $query несколькими постами выше.
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38254922
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замодернизировал немного:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
TEST(Index)
 N (Index)
 D CREATEGBL
 S Index=$G(Index)
 S beg=$NA(^tmp(Index))
 I Index'="" {
 		S var=$Q(@beg,-1)
 		S:var="" var=$O(@beg,-1)
 		S beg=$S(var'="":var,1:$NA(^tmp("")))
 }
 F  S beg=$Q(@beg) Q:beg=""  W !,$QS(beg,$QL(beg)),"=",@beg 
 Q
CREATEGBL
 S ^tmp("a")="a"
 S ^tmp("b")="b"
 S ^tmp("c")="c"
 S ^tmp("d")="d"
 S ^tmp("d",5,8)="dfss"
 S ^tmp("a",1000,"abc")="gggg"
 S ^tmp("c","c","c",456)="e"
 Q
...
Рейтинг: 0 / 0
помогите начинающему с глобалами
    #38255250
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.вроде как у ТС что-то не задолось с использования $query
Он просто не умеет их готовить... (с)
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / помогите начинающему с глобалами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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