#60498 - Fri Jan 31 2014 11:04 PM
Связь между скриптами
|
enthusiast
Registered: Wed Jan 18 2012
Записи: 256
|
Добрый день! Прошу подсказать опытных программистов. Как правильнее реализовать передачу данных из одного скрипта в другой? Через текстовый файл или через SQL?
|
Наверх
|
|
|
|
#60501 - Sat Feb 01 2014 07:51 AM
Re: Связь между скриптами
[Re: Kermit]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
через методы GlobalStoreObject/GlobalLoadObject Но если нужно сохранять данные всегда, тогда быстрее и проще через файл. Даже можно бинарный
Отредактировано ra81 (Sat Feb 01 2014 06:03 PM)
_________________________
__
|
Наверх
|
|
|
|
#60502 - Sat Feb 01 2014 02:04 PM
Re: Связь между скриптами
[Re: ra81]
|
enthusiast
Registered: Wed Jan 18 2012
Записи: 256
|
Спасибо за подсказку! Еле нашел где этот метод. TSLab.Script.Handlers.IContext.StoreGlobalObject Оно? А что означает " Данные в кеше могут быть стерты, если программе не хватает памяти." Это в случае, когда и оперативка и файл подкачки забит? Насколько часто может случаться такая ситуация?
|
Наверх
|
|
|
|
#60505 - Sat Feb 01 2014 06:03 PM
Re: Связь между скриптами
[Re: Kermit]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
Спасибо за подсказку! Еле нашел где этот метод. TSLab.Script.Handlers.IContext.StoreGlobalObject Оно? А что означает " Данные в кеше могут быть стерты, если программе не хватает памяти." Это в случае, когда и оперативка и файл подкачки забит? Насколько часто может случаться такая ситуация? Да все верно. Прошу простить за не очень нормальный ответ  . Насчет стирания данных вопрос сложный. Используйте 64 битную версию. Кэш для скриптов в настройках поставьте побольше и 99.99% что проблему не поймете. Не встречалась она в общем такая проблема пока еще у меня
_________________________
__
|
Наверх
|
|
|
|
#60521 - Mon Feb 03 2014 02:21 PM
Re: Связь между скриптами
[Re: ra81]
|
enthusiast
Registered: Wed Jan 18 2012
Записи: 256
|
Пытаюсь записать и считать скользящую из кеша
Фрагмент кода исходного скрипта, работает без ошибок // Расчет скользящей this.SMA1_h.Period = 2000; this.SMA1_h.Context = ctx; IList<double> SMA = ctx.GetData("SMA", new[] { SMA1_h.ToString() }, delegate { return SMA1_h.Execute(CL); }); //Запись в кеш SMA1_h.Context.StoreGlobalObject("SMA2000", SMA);
Читающий скрипт имеет код:
IList<double> SMAG = (IList<double>)SMA.Context.LoadGlobalObject("SMA2000");
Выдает ошибку, что нет объекта на который ссылка.
Где я накосячил?
|
Наверх
|
|
|
|
#60529 - Tue Feb 04 2014 08:07 AM
Re: Связь между скриптами
[Re: Kermit]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
Пытаюсь записать и считать скользящую из кеша
Фрагмент кода исходного скрипта, работает без ошибок // Расчет скользящей this.SMA1_h.Period = 2000; this.SMA1_h.Context = ctx; IList<double> SMA = ctx.GetData("SMA", new[] { SMA1_h.ToString() }, delegate { return SMA1_h.Execute(CL); }); //Запись в кеш SMA1_h.Context.StoreGlobalObject("SMA2000", SMA);
Читающий скрипт имеет код:
IList<double> SMAG = (IList<double>)SMA.Context.LoadGlobalObject("SMA2000");
Выдает ошибку, что нет объекта на который ссылка.
Где я накосячил?
А как вы определили что данные уже записаны перед тем как вы их читаете? В ТСлабе нигде нет гарантий о том что скрипты выполняются в каком-то порядке. Поэтому вам придется гадать, была ли запись в кэш или еще не было. Ну или дату вставлять. Или какой другой идентификатор. Полагаю что одну проблему вы решили и заработали еще парочку 
_________________________
__
|
Наверх
|
|
|
|
#60557 - Fri Feb 07 2014 11:16 AM
Re: Связь между скриптами
[Re: ra81]
|
enthusiast
Registered: Wed Jan 18 2012
Записи: 256
|
О да, на каждом шагу по 5 проблем. Решил уже для начала реализовать через файл. В принципе работает, но довольно часто возникает ошибка у читающего скрипта, о том что файл занят другим процессом. Может я не прав, но по моим ощущениям причина в том, что пишущий скрипт не сразу закрывает файл после записи. Для записи использую статический метод File.WriteAllText(). Как реализовать принудительное закрытие для него? Все, что я читал про IDisposable и Using, касается объектов. Или причина в ошибки в другом может быть?
|
Наверх
|
|
|
|
#60570 - Sun Feb 09 2014 08:51 PM
Re: Связь между скриптами
[Re: Kermit]
|
enthusiast
Registered: Thu Jun 06 2013
Записи: 378
|
а использовать аксессовский файл не пробовал?
|
Наверх
|
|
|
|
#60572 - Mon Feb 10 2014 11:16 AM
Re: Связь между скриптами
[Re: nikifor]
|
veteran
Registered: Thu Sep 29 2011
Записи: 1446
|
действительно, Microsoft Jet интегрирован в винду начиная с win2000. без установки access позоляет обращаться к mdb файлу не заморачиваясь.
|
Наверх
|
|
|
|
#60578 - Mon Feb 10 2014 12:06 PM
Re: Связь между скриптами
[Re: uuzzeerr]
|
enthusiast
Registered: Wed Jan 18 2012
Записи: 256
|
Насколько я понимаю, Access - это тот же SQL только вид в профиль. У меня был вопрос в принципе выбора текстовый файл или СУБД в качестве транзитного средства между скриптами. Я кстати, тут писал, что по прочтению примеров реализаций работы с файлами в C#, понял свою ошибку и сделал более стабильную чтение/запись. Но куда-то пропало сообщение c форума. Сегодня еще протестирую передачу и если не будет ошибок, выложу фрагменты кода. Может быть будет полезным, для других таких как я - начинающих.
|
Наверх
|
|
|
|
#60581 - Mon Feb 10 2014 12:38 PM
Re: Связь между скриптами
[Re: Kermit]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
проблема с блокировкой файла причтении записи решается путем создания FileStream и указания способа доступа и шэаринга. А дальше уже создавайте StreamReader/StreamWriter Тогда можно будет одновременно все делать. Но через файл работать, не избавляет вас ни от одной проблемы описанной выше  . Все будет совершенно так же. Неясно записано или нет. Считано или нет. Работа через файл БД проблему блокировки файла конечно снимает, за счет блокировки таблицы на запись с возможностью чтения. Но это уже движок БД сам делает. Но опять же не избавляет от проблем в моем посте выше.
_________________________
__
|
Наверх
|
|
|
|
#60618 - Mon Feb 10 2014 09:50 PM
Re: Связь между скриптами
[Re: ra81]
|
enthusiast
Registered: Wed Jan 18 2012
Записи: 256
|
Точно! Значит правильные вещи читал.  Пример передающий последнее значение скользящей из одного скрипта в другой. Код для записи res = SMA.Last();
string sr = res.ToString();
FileInfo f = new FileInfo("C:\\forscript.txt");
using (FileStream fs = f.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(sr);
}
} Код для чтения FileInfo f = new FileInfo("C:\\forscript.txt");
using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using(StreamReader sr = new StreamReader(fs))
{
SMA = sr.ReadLine();
}
}
|
Наверх
|
|
|
|
|
|