/// <summary> /// 读取CIT文件 /// </summary> /// <param name="citFilePath">cit文件路径----->来自里程快速校正中的选择cit文件的按钮</param /// <param name="numericUpDown1">跳变允许值----->来自里程快速校正中的 跳变容许值</param> private List <AutoIndex> _readCit(String citFilePath, int numericUpDown1) { List <AutoIndex> autoIndexClsList = new List <AutoIndex>(); //autoIndexClsList.Max(p => p.meter_between); //autoIndexClsList.Min(p => p.meter_between); //double count = citHelper.GetTotalSampleCount(citFilePath)/4/1000; //double tiaobian1=autoIndexClsList.Sum(p => p.meter_between)/count; //double tiaobian1i = autoIndexClsList.Sum(p => Math.Abs(p.meter_between))/autoIndexClsList.Count; if (numericUpDown1 <= 0) { ///MessageBox.Show("容许跳变值为 0"); return(autoIndexClsList); } try { FileInformation fileInfomation = citHelper.GetFileInformation(citFilePath); List <ChannelDefinition> channelList = citHelper.GetChannelDefinitionList(citFilePath); FileStream fs = new FileStream(citFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(fs, Encoding.Default); br.BaseStream.Position = 0; br.ReadBytes(120); br.ReadBytes(65 * fileInfomation.iChannelNumber); br.ReadBytes(BitConverter.ToInt32(br.ReadBytes(4), 0)); int iChannelNumberSize = fileInfomation.iChannelNumber * 2; byte[] b = new byte[iChannelNumberSize]; long milePos = 0; int km_pre = 0; int meter_pre = 0; int km_currrent = 0; int meter_current = 0; int meter_between = 0; int km_index = 0; int meter_index = 2; long iArray = (br.BaseStream.Length - br.BaseStream.Position) / iChannelNumberSize; for (int i = 0; i < iArray; i++) { milePos = br.BaseStream.Position; b = br.ReadBytes(iChannelNumberSize); if (Encryption.IsEncryption(fileInfomation.sDataVersion)) { b = Encryption.Translate(b); } if (i == 0) { km_pre = (int)(BitConverter.ToInt16(b, km_index)); meter_pre = (int)(BitConverter.ToInt16(b, meter_index)); } else { km_currrent = (int)(BitConverter.ToInt16(b, km_index)); meter_current = (int)(BitConverter.ToInt16(b, meter_index)); //第二个通道为采样点,换算为米就要除以4 meter_between = (km_currrent - km_pre) * 1000 + (meter_current - meter_pre) / 4; if (Math.Abs(meter_between) > numericUpDown1) { AutoIndex autoIndexCls = new AutoIndex(); autoIndexCls.milePos = milePos; autoIndexCls.km_current = km_currrent; autoIndexCls.meter_current = meter_current; autoIndexCls.km_pre = km_pre; autoIndexCls.meter_pre = meter_pre; autoIndexCls.meter_between = meter_between; autoIndexClsList.Add(autoIndexCls); } km_pre = km_currrent; meter_pre = meter_current; } } br.Close(); fs.Close(); } catch (Exception ex) { Console.WriteLine("读取CIT文件跳变点失败:" + ex.Message + ",堆栈:" + ex.StackTrace); } return(autoIndexClsList); }
/// <summary> /// 读取CIT文件 /// </summary> /// <param name="citFilePath"></param> private void ReadCIT(String citFilePath) { if (numericUpDown1.Value <= 0) { MessageBox.Show("容许跳变值为 0"); return; } try { autoIndexClsList.Clear(); dataGridView1.Rows.Clear(); FileInformation fileInfomation = citHelper.GetFileInformation(citFilePath); List <ChannelDefinition> channelList = citHelper.GetChannelDefinitionList(citFilePath); FileStream fs = new FileStream(citFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(fs, Encoding.Default); br.BaseStream.Position = 0; br.ReadBytes(120); br.ReadBytes(65 * fileInfomation.iChannelNumber); br.ReadBytes(BitConverter.ToInt32(br.ReadBytes(4), 0)); int iChannelNumberSize = fileInfomation.iChannelNumber * 2; byte[] b = new byte[iChannelNumberSize]; long milePos = 0; int km_pre = 0; int meter_pre = 0; int km_currrent = 0; int meter_current = 0; int meter_between = 0; int km_index = 0; int meter_index = 2; long iArray = (br.BaseStream.Length - br.BaseStream.Position) / iChannelNumberSize; for (int i = 0; i < iArray; i++) { milePos = br.BaseStream.Position; b = br.ReadBytes(iChannelNumberSize); if (Encryption.IsEncryption(fileInfomation.sDataVersion)) { b = Encryption.Translate(b); } if (i == 0) { km_pre = (int)(BitConverter.ToInt16(b, km_index)); meter_pre = (int)(BitConverter.ToInt16(b, meter_index)); } else { km_currrent = (int)(BitConverter.ToInt16(b, km_index)); meter_current = (int)(BitConverter.ToInt16(b, meter_index)); //第二个通道为采样点,换算为米就要除以4 meter_between = (km_currrent - km_pre) * 1000 + (meter_current - meter_pre) / 4; if (Math.Abs(meter_between) > numericUpDown1.Value) { AutoIndex autoIndexCls = new AutoIndex(); autoIndexCls.milePos = milePos; autoIndexCls.km_current = km_currrent; autoIndexCls.meter_current = meter_current; autoIndexCls.km_pre = km_pre; autoIndexCls.meter_pre = meter_pre; autoIndexCls.meter_between = meter_between; autoIndexClsList.Add(autoIndexCls); } km_pre = km_currrent; meter_pre = meter_current; } } br.Close(); fs.Close(); } catch (Exception ex) { MyLogger.logger.Error("读取CIT文件跳变点失败:" + ex.Message + ",堆栈:" + ex.StackTrace); MessageBox.Show(ex.Message); } }
public static T Idx <T>(this AutoIndex <T> autoIndex) where T : struct { return(autoIndex.Get()); }