private void DoCore() { DateTime start = DateTime.Now; m_Reader.BaseStream.Position = this.Definition.HeaderDefinition.BytesCount; List<FlightDataContentFrame> frames = new List<FlightDataContentFrame>(); while (m_Reader.BaseStream.Length > m_Reader.BaseStream.Position + 1) { FlightDataReading.AircraftModel1.FlightDataContentFrame frame = new FlightDataContentFrame(); long current = m_Reader.BaseStream.Position; List<FlightDataContentSegment> segments = new List<FlightDataContentSegment>(); foreach (var seg in this.Definition.FrameDefinition.Segments) { FlightDataContentSegment content = new FlightDataContentSegment() { DataTypeStr = seg.DataTypeStr, SegmentName = seg.SegmentName }; if (seg.DataTypeStr == DataTypeConverter.FLOAT) { float floatVal = m_Reader.ReadSingle(); content.Value = floatVal;// floatVal.ToString(); } else if (seg.DataTypeStr == DataTypeConverter.INT32) { int intVal = m_Reader.ReadInt32(); content.Value = intVal;// intVal.ToString(); } else if (seg.DataTypeStr == DataTypeConverter.LONG) { long longVal = m_Reader.ReadInt64(); content.Value = longVal;// longVal.ToString(); } else if (seg.DataTypeStr == DataTypeConverter.DATETIME) { content.Value = 0;// string.Empty; } else { byte[] strs = m_Reader.ReadBytes(seg.BytesCount); content.Value = 0;// new string(System.Text.Encoding.GetEncoding("ASCII").GetChars(strs)); } segments.Add(content); } var filtered = segments.Where( new Func<FlightDataContentSegment, bool>( delegate(FlightDataContentSegment seg1) { if (seg1 == null || string.IsNullOrEmpty(seg1.SegmentName) || seg1.SegmentName == "ID") return false; return true; })); frame.Segments = filtered.ToArray();//segments.ToArray(); frames.Add(frame); if (this.m_Reader.BaseStream.Position != current + this.Definition.FrameDefinition.BytesCount) { if (this.m_Reader.BaseStream.Position + 1 >= this.m_Reader.BaseStream.Length) break; this.m_Reader.BaseStream.Position = current + this.Definition.FrameDefinition.BytesCount; } } this.Frames = frames; return; //PHYHeader header = PHYHelper.ReadPHYHeader(m_Reader); //int secondCount = PHYHelper.GetFlyParamSeconds(header); //Task task1 = this.DoAddFlightRecordAsync(header); //string aircraftModel = header.AircrfName; ////获取需要读取的飞参列表 //List<FlyParameter> needReadParams = FlyParameter.Parameters.Values.ToList(); //Dictionary<string, FlyParameter> paramMap = new Dictionary<string, FlyParameter>(); //foreach (FlyParameter fp in needReadParams) // paramMap.Add(fp.ID, fp); //this.InitLevel2Entities(paramMap, secondCount); //for (int i = 1; i <= secondCount; i++) //{ // //读取当前秒的飞参值 // foreach (FlyParameter fp in needReadParams) // { // float[] values = PHYHelper.ReadFlyParameter(m_Reader, i, header, fp); // FlightDataEntities.FlightRawData dt // = new FlightDataEntities.FlightRawData() { ParameterID = fp.ID, Second = i, Values = values }; // this.PutRawDataToMongoDB(dt); // FlightRecordEntity entity = new FlightRecordEntity() { FlightSecond = i, ParameterID = fp.ID, Values = values }; // this.PutEntityToLevel2Mentities(entity, secondCount); // } //} //Task task2 = // Task.Run(new Action(delegate() //{ // this.FlushDataToMongoDB(secondCount); //})); ////一边入库一边处理Fault判定 //if (task1 != null) // task1.Wait(); //if (task2 != null) // task2.Wait(); }
public ParameterRawData[] GetDataBySecond(int second) { if (this.m_Reader == null || this.m_Reader.BaseStream.CanRead == false) { throw new IOException("无法读取数据源文件。"); } if (this.Definition == null) return null; int startPos = this.Definition.HeaderDefinition.BytesCount + (second * this.Definition.FrameDefinition.BytesCount); if (this.m_Reader.BaseStream.Position != startPos) this.m_Reader.BaseStream.Position = startPos; BitArray bitArray = new BitArray(this.m_Reader.ReadBytes(1024)); if (this.m_Reader.BaseStream.Position != startPos) this.m_Reader.BaseStream.Position = startPos;//复位 FlightDataReading.AircraftModel1.FlightDataContentFrame frame = new FlightDataContentFrame(); long current = m_Reader.BaseStream.Position; List<FlightDataContentSegment> segments = new List<FlightDataContentSegment>(); foreach (var seg in this.Definition.FrameDefinition.Segments) { if (seg == null) continue; if ((string.IsNullOrEmpty(seg.SegmentName) || seg.SegmentName.Equals("(NULL)") || seg.SegmentName.Equals("ID")) && (seg.BitsDefinition == null || seg.BitsDefinition.Length == 0)) { m_Reader.BaseStream.Position += seg.BytesCount; continue; } var testInt = m_Reader.ReadInt32(); m_Reader.BaseStream.Position -= 4; if (seg.BitsDefinition != null && seg.BitsDefinition.Length > 0) { this.ReadComplexSegment(segments, seg, bitArray); } else { ReadSimpleSegment(segments, seg, bitArray); } } var result = from se in segments group se by se.SegmentName into gse select gse; var result2 = from g in result select new ParameterRawData() { ParameterID = g.Key, Second = second, Values = (from one in g select Convert.ToSingle(one.Value)).ToArray() }; return result2.ToArray(); }