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

1. Как получить вцикле данные из глобала?
2. Как загнать массив в в глобал?
3. Как редактировать значения в глобале?
...
Рейтинг: 0 / 0
20.11.2009, 11:47
    #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
20.11.2009, 11:49
    #36321845
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
abrikos , по большему счету, массивы в глобал "загонять" не нужно. Нужно сразу писать данные в глобальный массив.
...
Рейтинг: 0 / 0
20.11.2009, 11:51
    #36321854
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
с такими вопросами лучше сначала почитать документацию например вот здесь
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
20.11.2009, 11:58
    #36321889
Ahilles
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
krvsa
s uz=$o(@glb@(uz))

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

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

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

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

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

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

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

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

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

Другое дело

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

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

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

Т.е. вытащить не все данные, а только определенные. И засунуть в переменную.
Как можно это сделать?
...
Рейтинг: 0 / 0
10.09.2010, 18:08
    #36841041
Ostika
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
Или в разные переменные.
...
Рейтинг: 0 / 0
10.09.2010, 18:39
    #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
10.09.2010, 18:49
    #36841102
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
В str действительно что-то есть? Проверьте.
Если мне не изменяет память, имя файла задается параметром Name, а не при создании объекта.
Меня смущает флаг открытия файла K, попрбуйте просто NWS.
Возможно один из ваших процессов заблокировал файл (может вы забыли его закрыть или программа вылетела до закрытия файла), попробуйте изменить имя файла.

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

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

А если вам нужна именно полная ссылка, то попробуйте команды $query(^Book(13)
Она подобна $Order, но возвращает не значение ключа, а текст глобальной ссылки целиком, и она работает на разных уровнях, а $Order только на одном.
...
Рейтинг: 0 / 0
10.09.2010, 18:56
    #36841111
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
Чтобы посмотреть статус возврата, нужно вместо
Do file.Open("WNKS")
делать
s sc=file.Open("WNKS")
w !,sc
Обычно хороший статус равен единице, а плохой там хитро написан.
...
Рейтинг: 0 / 0
10.09.2010, 20:07
    #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
10.09.2010, 21:21
    #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
11.09.2010, 19:29
    #36841965
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
MX-9 , в каком смысле?
...
Рейтинг: 0 / 0
13.09.2010, 02:54
    #36842700
Sergei Obrastsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное чтение / запись в глобал
krvsaAhillesбез него разве неполучится?

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

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

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

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


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