powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Программное чтение / запись в глобал
25 сообщений из 58, страница 1 из 3
Программное чтение / запись в глобал
    #36321807
abrikos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Cache' новичек.
Программирую метод (ObjectScript) для чтения/записи в глобал ^SP("Zakaz","Table")

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

Код: plaintext
1.
2.
3.
4.
5.
s glb=$na(^Test)
s uz=""
do {
   s uz=$o(@glb@(uz))
   w:uz'="" w !,uz,"=",@glb@(uz)
} while uz'=""

abrikos2. Как загнать массив в в глобал?

Если arr это массив... И структура в глобале нужна такая же... То

Код: plaintext
m ^Test=arr

abrikos3. Как редактировать значения в глобале?

Код: plaintext
1.
s ^Test="Это мой глобал"
s ^Test( 1 )="Это мой подузел"
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36321845
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abrikos , по большему счету, массивы в глобал "загонять" не нужно. Нужно сразу писать данные в глобальный массив.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36321854
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с такими вопросами лучше сначала почитать документацию например вот здесь
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36321889
Ahilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa
s uz=$o(@glb@(uz))

Я чтото забыл для чего @ используется. без него разве неполучится?
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36322017
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'@' ссылочный синтаксис для обращения к глобалам
можно и без него конечно, но когда в глобале несколько узлов, тогда очень удобно использовать ссылочный синтаксис

_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36322048
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor'@' ссылочный синтаксис для обращения к глобалам

Это только частный случай...
Это называется "Косвенные выражения". Вычисляется аргумент оператора и подставляется в "командную строку"...

Ahillesдля чего @ используется.

Для удобства и унификации программного кода, например...

Ahillesбез него разве неполучится?

Конечно получится. Нужно будет напрямую везде (!) указывать имя глобальной переменной. А так в одном месте указал и все.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36348547
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaКонечно получится. Нужно будет напрямую везде (!) указывать имя глобальной переменной. А так в одном месте указал и все.Макросы для таких вещей существуют, чтобы во время компиляции подставлять, а не во время исполнения.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36349269
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. Liseev , про какие "макросы" ты говоришь?

Код: plaintext
s @glb@(i,j)= 1 

никогда не будет "во время компиляции подставлять"... Оно будет вычисляться именно "во время исполнения"/

Другое дело

Код: plaintext
1.
2.
#define glb ^tmp(i,j)
...
s $$$glb= 1 
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36349273
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вот макросы "хороши" когда точно известно что нужно подставить при компиляции. Тут же вопрос глубже... Бывает что само имя не известно на момент компиляции. Оно именно вычисляется в нужный момент исполнения.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36840829
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь вопрос сюда :)) Построчное чтение из глобала. Как считывать строки из глобала (с определенными данными, н-р: ^Book(ID, ID.Avtor), не знаю как точно пишется) из присваивать их опред. переменным. Глобал в несколько узлов.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841022
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ostika , у глобала нет строк... У него есть имя, узлы и значения...

Код: plaintext
s ^Tmp( 1 , 2 , 3 ,"Test")="Value"
Tmp - имя
1,2,3,"Test" - узлы
"Value" - значение
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841039
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa Ostika , у глобала нет строк... У него есть имя, узлы и значения...

Ясно. Тогда мне надо сформировать строки из определенных значений. В глобале есть узел (пусть будет ID) и его подузел. Надо по знач. ID и из второго узла записать в переменную "ID, Avtor, Nazvanie"

Т.е. вытащить не все данные, а только определенные. И засунуть в переменную.
Как можно это сделать?
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841041
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или в разные переменные.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841091
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая вот функция (код, метод....):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ClassMethod WrFileGl() As %String
{
	Set str=$Order(^Book( 13 ,"Author"))
	Set file=##class(%File).%New("c:\box\fileGl.txt")
	w file
	Do file.Open("WNKS")
	Do file.WriteLine(str)
	Do file.Close()
	q  1 
}
Файл либо пустой, либо записано след. узел (но не значение). Что здесь не так?
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841102
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В str действительно что-то есть? Проверьте.
Если мне не изменяет память, имя файла задается параметром Name, а не при создании объекта.
Меня смущает флаг открытия файла K, попрбуйте просто NWS.
Возможно один из ваших процессов заблокировал файл (может вы забыли его закрыть или программа вылетела до закрытия файла), попробуйте изменить имя файла.

Функции Open и Write возвращают статусы, проверьте их.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841105
Ostika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н. , я в этом ничего не понимаю.. процессов никаких больше нет (если я правильно поняла), так что, что именно проверять и как? Можете объяснить подробнее? Пожалуйста 8)
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841107
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, как всегда не читаю вопрос перед тем как отвечать.
А значение вы таким способом и не получите.

$Order дает значение следующего ключа.
Чтобы записать просто значение глобала, нужно просто взять ^Book(13,"Author")
Типа
Do file.WriteLine(^Book(13,"Author"))

А если вам нужна именно полная ссылка, то попробуйте команды $query(^Book(13)
Она подобна $Order, но возвращает не значение ключа, а текст глобальной ссылки целиком, и она работает на разных уровнях, а $Order только на одном.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841111
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы посмотреть статус возврата, нужно вместо
Do file.Open("WNKS")
делать
s sc=file.Open("WNKS")
w !,sc
Обычно хороший статус равен единице, а плохой там хитро написан.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841194
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OstikaТогда мне надо сформировать строки из определенных значений. В глобале есть узел (пусть будет ID) и его подузел. Надо по знач. ID и из второго узла записать в переменную "ID, Avtor, Nazvanie"

Т.е. вытащить не все данные, а только определенные. И засунуть в переменную.
Как можно это сделать?
Если я правильно понял про узлы...

Код: plaintext
1.
2.
3.
s val1=$g(^Book(ID,"Avtor"))
s val2=$g(^Book(ID,"Nazvanie"))
zw val1,val2
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841269
MX-9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaOstikaТогда мне надо сформировать строки из определенных значений. В глобале есть узел (пусть будет ID) и его подузел. Надо по знач. ID и из второго узла записать в переменную "ID, Avtor, Nazvanie"

Т.е. вытащить не все данные, а только определенные. И засунуть в переменную.
Как можно это сделать?
Если я правильно понял про узлы...

Код: plaintext
1.
2.
3.
s val1=$g(^Book(ID,"Avtor"))
s val2=$g(^Book(ID,"Nazvanie"))
zw val1,val2


Ну вы блин даете...
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36841965
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MX-9 , в каком смысле?
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36842700
Sergei Obrastsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaAhillesбез него разве неполучится?

Конечно получится. Нужно будет напрямую везде (!) указывать имя глобальной переменной. А так в одном месте указал и все.
Действительно. А что скорость просядет раза в 3 и читабельность кода стремится к 0,
так это фигня.
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36842723
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей, не вводите человека в заблуждение.

Чтение блока данных занимает время порядка .003
выполнение той же команды разрешения косвенности занимает порядка 0.00003, т.е. разница два порядка. И нужно в первую очередь оптимизировать с точки зрения чтения блоков данных, а только потом с точки зрения выполнения вычислительных операций.

Так что если одна операция может и будет выполняться в 10 раз дольше, но конечное время будет таким же (в пределах погрешности).
...
Рейтинг: 0 / 0
Программное чтение / запись в глобал
    #36842772
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. , да пусть везде пишет полное имя глобала. Может через несколько лет работы устанет и таки поймёт...

P.S. Про "читабельность", точнее про её стремление к 0, вообще добил.
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Программное чтение / запись в глобал
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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