public void Complex() { var dic = new DicS <int>(1000); dic.Clear(); Assert.AreEqual(0, dic.Count); dic.Add("First", 1); dic.Add("Second", 2); Assert.AreEqual(2, dic.Count); Assert.AreEqual(1, dic["first"]); Assert.AreEqual(1, dic.Get("FIRST")); Assert.AreEqual(2, dic["Second"]); var dicAdd = new DicS <int>(); dicAdd.Add("second", 22); dicAdd.Add("third", 33); dic.AddDic(dicAdd); Assert.AreEqual(3, dic.Count); Assert.IsTrue(dic.ContainsKey("THIRD")); Assert.IsTrue(dic.ContainsKey("Second")); Assert.AreEqual(56, dic.Values.Sum()); dic.AddDic(dicAdd); Assert.AreEqual(3, dic.Count); Assert.AreEqual(1, dic["first"]); Assert.AreEqual(22, dic["second"]); Assert.AreEqual(33, dic["third"]); dic.Remove((k, v) => v == 33 || k.ToLower() == "second"); Assert.AreEqual(1, dic.Count); Assert.IsTrue(dic.ContainsKey("First")); Assert.IsFalse(dic.ContainsKey("Second")); }
public void StringFromCollections() { var dic = new DicS <string>(); Assert.AreEqual("", dic.ToPropertyString()); dic.Add("Prop1", "a"); dic.Add("Prop2", "b"); dic.Add("Prop3", "c"); Assert.AreEqual("PROP1=a;PROP2=b;PROP3=c;", dic.ToPropertyString()); var dict = new Dictionary <string, string>(); Assert.AreEqual("", dict.ToPropertyString()); dict.Add("Prop1", "a"); dict.Add("Prop2", "b"); dict.Add("Prop3", "c"); Assert.AreEqual("Prop1=a;Prop2=b;Prop3=c;", dict.ToPropertyString()); var list = new List <string>(); Assert.AreEqual("", list.ToPropertyString()); list.Add("Prop1"); list.Add("Prop2"); list.Add("Prop3"); Assert.AreEqual("Prop1;Prop2;Prop3;", list.ToPropertyString()); var set = new HashSet <string>(); Assert.AreEqual("", set.ToPropertyString()); set.Add("Prop1"); Assert.AreEqual("Prop1;", set.ToPropertyString()); }
//Загрузка свойств из словаря protected override void ReadInf(DicS <string> dic) { bool e = dic["IdentType"].ToUpper() != "WINDOWS"; string server = dic["SQLServer"], db = dic["Database"]; SqlProps = new SqlProps(server, db, e, dic["Login"], dic["Password"]); }
protected internal override string CheckSettings(DicS <string> infDic) { if (infDic["CloneDir"].IsEmpty()) { return("Не указан каталог клона"); } return(""); }
//Проверка настроек protected override string CheckSettings(DicS <string> inf) { if (!inf.ContainsKey("SQLServer")) { return("Не указано имя архивного сервера"); } return(""); }
public RowGroupStruct(TablStruct tablStruct, IEnumerable <string> fields) { TablStruct = tablStruct; Fields = new DicS <DataType>(); foreach (var field in fields) { Fields.Add(field, tablStruct.Fields[field]); } }
protected internal ProviderSignal(ProviderConnect connect, string code, DataType dataType, string contextOut, DicS <string> inf) { Connect = connect; Code = code; DataType = dataType; ContextOut = contextOut; Inf = inf; Inf.DefVal = ""; }
//Чтение значений из таблиц, usedSignals - набор кодов используемых сигналов public void PrepareSignals(DicS <DataType> usedSignals) { if (!IsConnected && !Check()) { return; } Logger.AddEvent("Чтение списка имитируемых сигналов"); _signals.Clear(); _signalsId.Clear(); try { using (var rec = new ReaderAdo(ImitDataFile, "SELECT * FROM SignalsBehavior WHERE ImitFlag=True ORDER BY ImitId")) while (rec.Read()) { var sig = new ImitSignal(rec, this); if (usedSignals.ContainsKey(sig.Code)) { sig.SetDataType(usedSignals[sig.Code]); _signals.Add(sig.Code, sig); _signalsId.Add(sig.ImitId, sig); } } } catch (Exception ex) { Logger.AddError("Ошибка чтения списков имитированных сигналов", ex); } Logger.AddEvent("Чтение списка имитируемых значений, " + _signalsId.Count + " сигналов"); try { using (var rec = new ReaderAdo(ImitDataFile, "SELECT SignalsValues.ImitId AS ImitId, SignalsValues.Time, SignalsValues.RelativeTime, SignalsValues.Value, SignalsValues.Nd FROM SignalsValues INNER JOIN SignalsBehavior ON SignalsBehavior.ImitId = SignalsValues.ImitId " + "WHERE SignalsBehavior.ImitFlag=True ORDER BY SignalsValues.ImitId, SignalsValues.RelativeTime")) { rec.Read(); while (!rec.EOF) { int id = rec.GetInt("ImitId"); if (_signalsId.ContainsKey(id)) { _signalsId[id].ReadMoments(rec); } else { while (!rec.EOF && rec.GetInt("ImitId") == id) { rec.Read(); } } } } } catch (Exception ex) { Logger.AddError("Ошибка чтения списков имитируемых значений", ex); } }
//Чтение списка функций из SprFunctions и SprFunctionsTypes protected void ReadFunctions() { FunsDic = new DicS <Fun>(); const string stSql = "SELECT Functions.Name, Functions.Synonym, Functions.Code, Functions.CodeType, FunctionsOverloads.* " + "FROM Functions INNER JOIN FunctionsOverloads ON Functions.Id = FunctionsOverloads.FunctionId WHERE Functions.NotLoad = False ORDER BY Functions.Name;"; using (var rec = new ReaderAdo(General.GeneralDir + "General.accdb", stSql)) while (rec.Read()) { new Fun(rec, this); } }
//Запись значений по параметру и подпараметрам в линейную ведомость, columns - список колонок таблицы LinVed public void ToLinVed(RecDao rec, DicS <VedColumn> columns) { if (_param.RunParam.CalcValue == null || _param.RunParam.CalcValue.SingleValue == null) { return; } var par = _param.RunParam.CalcValue.SingleValue.ToMomList(); var subs = new List <VedMomList>(); foreach (var col in columns.Values) { if (SubParams.ContainsKey(col.Code)) { subs.Add(new VedMomList(col.Code, SubParams[col.Code])); } } foreach (var mom in par) { rec.AddNew(); rec.Put("IdParam", _id); rec.Put("TimeValue", mom.Time); rec.Put("TimeString", mom.Time.ToStringWithMs()); if (mom.DataType.LessOrEquals(DataType.Real)) { if (columns.ContainsKey("ValueReal")) { rec.Put("ValueReal", mom.Real); } } else if (columns.ContainsKey("ValueString")) { rec.Put("ValueString", mom.String); } if (rec.ContainsField("Nd")) { rec.Put("Nd", mom.Nd); } if (rec.ContainsField("ErrorString")) { rec.Put("ErrorString", mom.Error.Text); } foreach (var sub in subs) { WriteValue(sub.ChangeMoment(mom.Time), rec, sub.Code); } //foreach (var col in _vedSaver.ColumnsParams.Values) // if (col.LinVedView != VedView.None) // WriteProp(col, rec); rec.Update(); } }
//Вызов окна настройки public string Setup() { if (MenuCommands == null) { MenuCommands = new DicS <Dictionary <string, IMenuCommand> >(); AddMenuCommands(); } IsSetup = true; new ProviderSetupForm { SetupType = SetupType, Provider = (IProvider)this }.ShowDialog(); while (IsSetup) { Thread.Sleep(500); } return(ProviderInf); }
public void Simple() { var dic = new DicS <string>(); Assert.AreEqual(0, dic.Count); dic.Add("a", "sa"); dic.Add("B", "sB"); Assert.IsTrue(dic.ContainsKey("a")); Assert.IsTrue(dic.ContainsKey("b")); Assert.AreEqual("sa", dic["a"]); Assert.AreEqual("sB", dic["B"]); Assert.AreEqual("sa", dic.Get("A")); Assert.AreEqual("sB", dic.Get("b", "h")); Assert.IsNull(dic["c"]); Assert.AreEqual("h", dic.Get("c", "h")); Assert.AreEqual(2, dic.Count); dic.Add("b", "gghsdauh"); Assert.AreEqual(2, dic.Count); Assert.AreEqual("sB", dic["B"]); dic["b"] = "gg"; Assert.AreEqual(2, dic.Count); Assert.AreEqual("gg", dic["B"]); dic.Add("c", "SC"); Assert.IsTrue(dic.ContainsKey("C")); Assert.AreEqual(3, dic.Count); dic.Add("b", "ssb", true); Assert.IsTrue(dic.ContainsKey("b")); Assert.IsTrue(dic.ContainsKey("c")); Assert.AreEqual("ssb", dic["b"]); Assert.IsTrue(dic.Keys.Contains("B")); Assert.IsTrue(dic.Values.Contains("ssb")); dic.Remove("C"); Assert.AreEqual(2, dic.Count); Assert.IsFalse(dic.ContainsKey("c")); Assert.IsNull(dic["c"]); Assert.AreEqual("def", dic.Get("C", "def")); Assert.IsFalse(dic.Remove("C")); Assert.IsFalse(dic.ContainsKey("c")); Assert.AreEqual("def", dic.Get("C", "def")); Assert.IsFalse(dic.ContainsKey(null)); dic.Clear(); Assert.AreEqual(0, dic.Count); Assert.IsNull(dic["a"]); Assert.IsFalse(dic.ContainsKey("c")); Assert.IsFalse(dic.ContainsKey("a")); }
//Получение списка проектов и режимов расчета public DicS <ReportProjectSetup> GetProjects() { var res = new DicS <ReportProjectSetup>(); int i = 2; try { while (!SysIsEmpty(i, 4)) { var pr = new ReportProjectSetup(SysValue(i, 4), SysValue(i, 5)); res.Add(pr.CodeFinal, pr); i++; } } catch {} return(res); }
//Создание клона архива public void MakeClone(DateTime beginRead, DateTime endRead, string cloneFile = "", string cloneProps = "") { try { using (var db = new DaoDb(cloneFile)) { using (var sys = new SysTabl(db)) CloneInf = (sys.Value("CloneInf") ?? "").ToPropertyDicS(); using (CloneRec = new RecDao(db, "SELECT * FROM MomentsValues")) using (CloneErrorRec = new RecDao(db, "SELECT * FROM ErrorsList")) GetValues(beginRead, endRead); } } catch (Exception ex) { Logger.AddError("Ошибка при создании клона", ex); } CloneRec = null; }
//Задать максимальный уровень //И сразу загрузить список полей из таблицы в Fields public void AddLevel(int level) { var tname = TablName(level); var dicn = new DicI <TablField>(); var dic = new DicS <TablField>(); var t = _db.Database.TableDefs[tname]; int i = 0; foreach (Field f in t.Fields) { if (f.Name != "Id" && f.Name != "ParentId" && f.Name != "Num" && f.Name != "Code") { var tf = new TablField(f.Name, i, f.Type.ToDataType()); dic.Add(f.Name, tf); dicn.Add(i++, tf); } } Fields.Add(level, dic); FieldsNums.Add(level, dicn); }
//Проверка настроек protected internal override string CheckSettings(DicS <string> inf) { string err = ""; if (inf["SQLServer"].IsEmpty()) { err += "Не указано имя SQL-сервера" + Environment.NewLine; } if (inf["IndentType"].IsEmpty()) { err += "Не задан тип идентификации" + Environment.NewLine; } if (inf["IndentType"] == "SqlServer" && inf["Login"].IsEmpty()) { err += "Не задан логин" + Environment.NewLine; } if (inf["Database"].IsEmpty()) { err += "Не задано имя базы данных" + Environment.NewLine; } return(err); }
//Формирует строку параметров, использующих данный параметр или сигнал internal static string UsingParamsString(DicS <CalcParam> pars) { string s = ""; foreach (var par in pars.Values) { s += par.FullCode + "=Pr_"; if (par.Owner == null) { s += "Параметр"; } else { s += "Подпараметр"; } if (par.Inputs.Count != 0) { s += "-функция"; } s += "|"; } return(s); }
//Получение Tag точки по сигналу protected override string GetOpcItemTag(DicS <string> inf) { return(ServerGroup + ".point." + inf["SysNum"]); }
//Загрузка дополнительных настроек провайдера из Inf protected override void GetAdditionalInf(DicS <string> inf) { ServerGroup = inf.Get("ServerGroup", ""); }
//Настройки провайдера protected override void ReadInf(DicS <string> dic) { _dataSource = dic["DataSource"]; }
//Загрузка дополнительных настроек провайдера из Inf protected abstract void GetAdditionalInf(DicS <string> inf);
protected override string GetOpcItemTag(DicS <string> inf) { return(""); }
protected override void GetAdditionalInf(DicS <string> inf) { }
//Получение Tag точки по сигналу protected abstract string GetOpcItemTag(DicS <string> inf);
//Проверка таблицы сигналов public string CheckSignals(bool onlyInUse = false) { StartAtom(Atom.CheckSignals); CountsToZero(); var objectsId = new DicI <ObjectSignal>(); var signals = new DicS <Signal>(); _objects.Clear(); try { if (State == State.Closed) { AddError("Копилятор уже был закрыт"); } else if (State == State.Empty) { AddError("Проект не загружен"); } else { //using (var reco = new RecDao(_projectFile, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName, ErrMess FROM Objects ORDER BY ObjectId")) using (var reco = new RecDao(_objectsFile, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName, ErrMess FROM Objects ORDER BY ObjectId")) //ab\ { Procent = 10; while (reco.Read()) { var ob = new ObjectSignal(reco, true); objectsId.Add(ob.Id, ob); if (!_objects.ContainsKey(ob.Code)) { _objects.Add(ob.Code, ob); } else { ob.ErrMess += "Повтор кода объекта (" + ob.Code + "); "; reco.Put("ErrMess", ob.ErrMess); _objects[ob.Code].ErrMess += "Повтор кода объекта (" + ob.Code + "); "; } } Procent = 25; using (var recs = new RecDao(reco.DaoDb, "SELECT ObjectId, Signals.Default, CodeSignal, NameSignal, Units, Signals.DataType, ConstValue, Signals.SourceName, Signals.ReceiverName, Signals.Inf, Signals.FullCode AS FullCode, Signals.ErrMess" + (!onlyInUse ? "" : ", SignalsInUse.FullCode AS FullCodeInUse") + " FROM Signals" + (!onlyInUse ? "" : " LEFT JOIN SignalsInUse ON Signals.FullCode=SignalsInUse.FullCode "))) { Procent = 35; while (recs.Read()) { var sig = new Signal(recs, objectsId, true); if (onlyInUse) { sig.InUse = !recs.GetString("FullCodeInUse").IsEmpty(); } objectsId[sig.ObjectId].InUse |= sig.InUse; if (signals.ContainsKey(sig.FullCode)) { sig.ErrMess += "Повтор полного кода сигнала (" + sig.FullCode + "); "; } else { signals.Add(sig.FullCode, sig); } if (sig.ErrMess != "") { recs.Put("ErrMess", sig.ErrMess, true); if (sig.InUse || !onlyInUse) { SignalsErrorsCount++; } objectsId[sig.ObjectId].ErrorInSignals = true; } } } Procent = 80; reco.MoveFirst(); while (!reco.EOF) { var ob = objectsId[reco.GetInt("ObjectId")]; if (ob.DefalutsCount == 0) { ob.ErrMess += "Объект не содержит сигналов по умолчанию; "; } if (ob.DefalutsCount >= 2) { ob.ErrMess += "Объект содержит более одного сигнала по умолчанию; "; } if (ob.ErrorInSignals) { ob.ErrMess += "Ошибки в сигналах; "; } if (ob.ErrMess != "") { reco.Put("ErrMess", ob.ErrMess); if (!onlyInUse || ob.InUse) { ObjectsErrorsCount++; } } reco.MoveNext(); } } } } catch (Exception ex) { return(ex.MessageError("Ошибка при проверке сигналов")); } return(FinishAtom(State.Project, State.Project, "Проект: " + _code + "; Объектов с ошибками: " + ObjectsErrorsCount + "; Сигналов с ошибками: " + SignalsErrorsCount)); }
//Свойства protected override void ReadInf(DicS <string> dic) { Label = dic["Label"]; ValueForming = dic["ValueForming"] == "Time" ? ValueForming.Time : ValueForming.Uniform; }
//Проверка настроек protected override string CheckSettings(DicS <string> inf) { return(!inf["ArchiveDir"].IsEmpty() ? "" : "Не задан путь к каталогу архива"); }
//Загрузка дополнительных настроек провайдера из Inf protected override void ReadAdditionalInf(DicS <string> dic) { ServerNode = dic["ServerNode"]; ServerGroup = dic["ServerGroup"]; }
//Получение Tag точки по сигналу protected override string GetOpcItemTag(DicS <string> inf) { return(ServerNode + "." + ServerGroup + "." + inf["TagName"]); }
//Получение Tag точки по сигналу protected override string GetOpcItemTag(DicS <string> inf) { return(inf["CodeObject"]); }