public static void GetSessionInfo() { Send(M_ASK_ALL); var buf = new byte[1000]; var res = tcp_client.GetStream().Read(buf, 0, buf.Length); try // todo fix { File.WriteAllBytes(@"logs\start_header.dat", buf); } catch { } SessionInfo = new SessionInfoStruct(); var stream = new MemoryStream(buf); var reader = new BinaryReader(stream); uint size_dummy = reader.ReadUInt32(); uint type = reader.ReadUInt32(); if (type != M_ANSWER_INFO) { throw new Exception("strange answer: " + type); } SessionInfo.ClientName = reader.ReadString1251(); SessionInfo.ChannelsNum = reader.ReadInt32(); SessionInfo.ChannelsInfo = new ChannelInfoStruct[SessionInfo.ChannelsNum]; for (int i = 0; i < SessionInfo.ChannelsNum; i++) { SessionInfo.ChannelsInfo[i].Name = reader.ReadString1251(); SessionInfo.ChannelsInfo[i].BitWeight = reader.ReadDouble(); SessionInfo.ChannelsInfo[i].Frequency = reader.ReadDouble(); SessionInfo.ChannelsInfo[i].UnitName = reader.ReadString1251(); SessionInfo.ChannelsInfo[i].HighFilter = reader.ReadDouble(); SessionInfo.ChannelsInfo[i].LowFilter = reader.ReadDouble(); SessionInfo.ChannelsInfo[i].FilterLevel = reader.ReadInt32(); SessionInfo.ChannelsInfo[i].Rejector = reader.ReadDouble(); SessionInfo.ChannelsInfo[i].Sensivity = reader.ReadDouble(); } SessionInfo.SchemeName = reader.ReadString1251(); //Console.WriteLine(stream.Position); // Console.WriteLine(name.Length); }
public static List <short[]> LoadTxt(string path) { StreamReader file = new StreamReader(path, Encoding.GetEncoding("windows-1251")); // заполняем сессию /* * Иванов Петр Сергеевич <Ф.И.О.> * м <Пол.> * 42 <Возраст, лет> * <Примечания> * 4.8.2019 <Дата проведения исследования: день, месяц, год> * 2 <Общее количество каналов> * 250. <Частота дискретизации, Гц> * * 3 <Количество групп физиологических сигналов> * * Т <Тип сигналов 1-й группы> * 1 <Количество сигналов 1-й группы> * 0,0013 <Вес бита сигналов 1-й группы> * °С <Единицы измерения сигналов 1-й группы> * * Двигательная активность <Тип сигналов 2-й группы> * 1 <Количество сигналов 2-й группы> * 0,0003 <Вес бита сигналов 2-й группы> * у.е. <Единицы измерения сигналов 2-й группы> * * ЭЭГ <Тип сигналов 3-й группы> * 0 <Количество сигналов 3-й группы> * 0,1250 <Вес бита сигналов 3-й группы> * мкВ <Единицы измерения сигналов 3-й группы> * * <Полярность значений сигналов ЭЭГ – в соответствии с конвенцией о полярности. Негативность отражена минусом.> * 91e0d8ec-db86-4711-9994-9e1bd4ee2db9 <Идентификатор исследования> * 1 <Количество фрагментов записи> * 20:28:05.320 <Время начала 1-го фрагмента> * 2700 <Продолжительность 1-го фрагмента в отсчетах, отсчетов> * Температура ДПТ */ // todo: не очень, точки будут считаться как спецсигналы string ReadParam(StreamReader f, string param_name) { var line = f.ReadLine(); var splitted = line.Split('\t'); //if (!Regex.Match(splitted[1],"^<" + param_pattern + ">$").Success) if (splitted[1] != "<" + param_name + ">") { throw new Exception("param " + param_name + " not match: " + splitted[1]); } return(splitted[0]); }; double ReadDouble(StreamReader f, string param_name) { var res = ReadParam(f, param_name); return(double.Parse(res.Replace('.', ','))); // туду - некрасивый хак локали } SessionInfo = new SessionInfoStruct(); SessionInfo.ClientName = ReadParam(file, "Ф.И.О."); ReadParam(file, "Пол."); ReadParam(file, "Возраст, лет"); ReadParam(file, "Примечания"); ReadParam(file, "Дата проведения исследования: день, месяц, год"); SessionInfo.ChannelsNum = int.Parse(ReadParam(file, "Общее количество каналов")); var freq = ReadDouble(file, "Частота дискретизации, Гц"); var groups_num = int.Parse(ReadParam(file, "Количество групп физиологических сигналов")); #if !OLDNET var channels_raw = new List <(double, string)>(); for (int i = 0; i < groups_num; i++) { //Т <Тип сигналов 1-й группы> //4 <Количество сигналов 1-й группы> //0,0013 <Вес бита сигналов 1-й группы> //°С <Единицы измерения сигналов 1-й группы> var ig = (i + 1) + "-й группы"; var type = ReadParam(file, "Тип сигналов " + ig); var num = int.Parse(ReadParam(file, "Количество сигналов " + ig)); var weight = ReadDouble(file, "Вес бита сигналов " + ig); var unit = ReadParam(file, "Единицы измерения сигналов " + ig); for (int j = 0; j < num; j++) { channels_raw.Add((weight, unit)); } } ; ReadParam(file, "Полярность значений сигналов ЭЭГ – в соответствии с конвенцией о полярности. Негативность отражена минусом."); ReadParam(file, "Идентификатор исследования"); ReadParam(file, "Количество фрагментов записи"); ReadParam(file, "Время начала 1-го фрагмента"); ReadParam(file, "Продолжительность 1-го фрагмента в отсчетах, отсчетов"); var channels_names = file.ReadLine().Split('\t'); SessionInfo.ChannelsInfo = new ChannelInfoStruct[SessionInfo.ChannelsNum]; for (int i = 0; i < SessionInfo.ChannelsNum; i++) { SessionInfo.ChannelsInfo[i].Name = channels_names[i]; SessionInfo.ChannelsInfo[i].BitWeight = channels_raw[i].Item1; SessionInfo.ChannelsInfo[i].Frequency = freq; SessionInfo.ChannelsInfo[i].UnitName = channels_raw[i].Item2; SessionInfo.ChannelsInfo[i].HighFilter = 100; SessionInfo.ChannelsInfo[i].LowFilter = 0; SessionInfo.ChannelsInfo[i].FilterLevel = 2; SessionInfo.ChannelsInfo[i].Rejector = 50; SessionInfo.ChannelsInfo[i].Sensivity = 1; } SessionInfo.SchemeName = "Emulated"; var loaded_list = new List <short[]>(); string ln; while ((ln = file.ReadLine()) != null) { if (ln == "<Все служебные маркеры>") { break; } var s_arr = ln.Split('\t'); var arr = new short[SessionInfo.ChannelsNum]; for (int i = 0; i < arr.Length; i++) { arr[i] = short.Parse(s_arr[i]); } loaded_list.Add(arr); } file.Close(); file.Dispose(); return(loaded_list); #else throw new NotImplementedException(); #endif }