/// <summary> /// 创建cit文件并写入头部和通道定义信息 /// </summary> /// <param name="citPath">cit文件路径</param> /// <param name="headInfo">文件头部信息</param> /// <param name="channelInfo">通道定义信息</param> public void WriteCitHeadAndChannelInfo(string citPath, DataHeadInfo headInfo, List <DataChannelInfo> channelInfo) { CitFileHelper citHelper = new CitFileHelper(); citHelper.WriteDataInfoHead(citPath, headInfo); citHelper.WriteDataChannelInfoHead(citPath, channelInfo); citHelper.WriteDataExtraInfo(citPath, ""); }
/// <summary> /// 导出通道数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_Export_Click(object sender, EventArgs e) { try { this.btn_Export.Enabled = false; GetChannelNames(); if (channelNameList.Count == 0) { MessageBox.Show("请选择至少一个通道"); return; } dataList.Clear(); for (int i = 0; i < channelNameList.Count; i++) { CitFileHelper citHelper = new CitFileHelper(); if (channelNameList[i].sNameEn == "sample") { double[] d = citHelper.GetSingleChannelDataNoConvert(filePathStr, 2); dataList.Add(d); } else { double[] d = citHelper.GetSingleChannelData(filePathStr, citHelper.GetChannelId(channelNameList[i].sNameEn, filePathStr)); dataList.Add(d); } } //使用中文名称 if (ckb_Chinese.Checked) { ExportDataTxt(true); } else { ExportDataTxt(false); } MessageBox.Show("数据导出完成"); this.btn_Export.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 获取BNY数据并向cit文件中写入数据 /// </summary> /// <param name="channelList"></param> private void GetBnyDataAndWriteCit(string citPath, string bnyPath, List <ChannelNew> channelList) { CitFileHelper citHelper = new CitFileHelper(); int[] bnyChannelArr = channelList.Where(s => s.BNYChannelId >= 0).Select(s => s.BNYChannelId).ToArray(); int sampleNum = 50000; long startPosition = 0; long endPosition = 0; long bnyFileLength = common.GetBNYLastPosition(bnyPath); int pageCount = 0; double realPageCount = bnyFileLength * 1.0 / (sampleNum * BNYFile.GetChannelSize()); if (realPageCount % ((int)realPageCount) > 0) { pageCount = ((int)realPageCount) + 1; } else { pageCount = (int)realPageCount; } List <float[]> bnyList = new List <float[]>(); List <float[]> resultList = new List <float[]>(); float[] fvalue = new float[sampleNum]; for (int i = 0; i < pageCount; i++) { bnyList = common.GetBNYData(bnyPath, sampleNum, startPosition, ref endPosition); startPosition = endPosition; resultList.Clear(); for (int j = 0; j < channelList.Count; j++) { if (channelList[j].BNYChannelId >= 0) { if (bnyList[channelList[j].BNYChannelId].Length < sampleNum) { fvalue = new float[bnyList[channelList[j].BNYChannelId].Length]; if (channelList[j].BNYChannelId == 2) { if (channelList[j].dataChannelInfo.sNameEn == "KM") { fvalue = bnyList[channelList[j].BNYChannelId].Select(p => ((float)(int)p)).ToArray(); } else if (channelList[j].dataChannelInfo.sNameEn == "M") { fvalue = bnyList[channelList[j].BNYChannelId].Select(p => (p - (int)p) * 1000).ToArray(); } else { fvalue = bnyList[channelList[j].BNYChannelId]; } } else { fvalue = bnyList[channelList[j].BNYChannelId]; } } else { if (channelList[j].BNYChannelId == 2) { if (channelList[j].dataChannelInfo.sNameEn == "KM") { fvalue = bnyList[channelList[j].BNYChannelId].Select(p => ((float)(int)p)).ToArray(); } else if (channelList[j].dataChannelInfo.sNameEn == "M") { fvalue = bnyList[channelList[j].BNYChannelId].Select(p => (p - (int)p) * 1000).ToArray(); } else { fvalue = bnyList[channelList[j].BNYChannelId]; } } else { fvalue = bnyList[channelList[j].BNYChannelId]; } } } else { fvalue = new float[bnyList[0].Length]; } resultList.Add(fvalue); } citHelper.WriteChannelDataFloat(citPath, resultList); if (tokenSource.IsCancellationRequested) { throw new OperationCanceledException(); } } }
private void WriteBnyData(string fileName, string citPath, List <ChannelNew> channelNewList) { CitFileHelper citHelper = new CitFileHelper(); using (FileStream fs = new FileStream(citPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) { using (BinaryWriter bw = new BinaryWriter(fs, Encoding.Default)) { DataHeadInfo dhi = citHelper.GetDataInfoHead(citPath); long pos = bw.BaseStream.Length; List <DataChannelInfo> channelList = citHelper.GetDataChannelInfoHead(citPath); int iChannelNumberSize = dhi.iChannelNumber * 2; byte[] dataArray = new byte[iChannelNumberSize]; List <Byte> dataList = new List <Byte>(); short tmpRmsData = 0; Byte[] tmpBytes = new Byte[2]; while (true) { if (channelDataList.ContainsKey(fileName) && channelDataList[fileName].Count > 0) { List <float[]> channelData = channelDataList[fileName].Dequeue(); DateTime dt2 = DateTime.Now; if (channelData == null || isCancel) { break; } long iArrayLen = channelData[0].Length; for (int k = 0; k < iArrayLen; k++) { if (citHelper.IsEncrypt(dhi)) { for (int iTmp = 0; iTmp < channelNewList.Count; iTmp++) { if (channelNewList[iTmp].BNYChannelId > 6) { tmpRmsData = (short)((channelData[iTmp][k] / 10 - channelList[iTmp].fOffset) * channelList[iTmp].fScale); } else { tmpRmsData = (short)((channelData[iTmp][k] - channelList[iTmp].fOffset) * channelList[iTmp].fScale); } tmpBytes = CitFileHelper.ByteXORByte(BitConverter.GetBytes(tmpRmsData)); dataList.AddRange(tmpBytes); } } else { for (int iTmp = 0; iTmp < channelNewList.Count; iTmp++) { try { if (channelNewList[iTmp].BNYChannelId > 6) { tmpRmsData = (short)((channelData[iTmp][k] / 10 - channelList[iTmp].fOffset) * channelList[iTmp].fScale); } else { tmpRmsData = (short)((channelData[iTmp][k] - channelList[iTmp].fOffset) * channelList[iTmp].fScale); } dataList.AddRange(BitConverter.GetBytes(tmpRmsData)); } catch (Exception ex) { throw ex; } } } ///bw.BaseStream.Position = 100; bw.Write(dataList.ToArray()); bw.Flush(); dataList.Clear(); } } } //bw.Close(); //DateTime dt3 = DateTime.Now; //Console.WriteLine("two :" + (dt3 - dt2).TotalSeconds.ToString()); } //fs.Close(); } }
private void GetTxtDataAndWriteCit(string txtPath, string citPath, List <ChannelNew> channelList) { CitFileHelper citHelper = new CitFileHelper(); int[] bnyChannelArr = channelList.Where(s => s.BNYChannelId >= 0).Select(s => s.BNYChannelId).ToArray(); int sampleNum = 50000; long startPosition = 1; long endPosition = sampleNum; long lineCount = common.GetTextLineCount(txtTxtPath.Text); int pageCount = 0; double realPageCount = lineCount * 1.0 / (sampleNum); pageCount = (int)realPageCount; List <float[]> txtDataList = new List <float[]>(); List <float[]> resultList = new List <float[]>(); float[] fvalue = new float[sampleNum]; for (int i = 0; i < pageCount; i++) { txtDataList = common.GetTxtData(txtPath, startPosition, endPosition); long temp = endPosition; endPosition = endPosition + sampleNum; startPosition = temp + 1; resultList.Clear(); for (int j = 0; j < channelList.Count; j++) { if (channelList[j].BNYChannelId >= 0) { if (channelList[j].BNYChannelId == 0) { if (channelList[j].dataChannelInfo.sNameEn == "KM") { fvalue = txtDataList[channelList[j].BNYChannelId].Select(p => ((float)(int)p)).ToArray(); } else if (channelList[j].dataChannelInfo.sNameEn == "M") { var kmValues = txtDataList[channelList[j].BNYChannelId]; float[] fvalueNew = new float[sampleNum]; for (int k = 0; k < kmValues.Length; k++) { if (k == 20861) { } string[] strValues = kmValues[k].ToString("F3").Split('.'); if (strValues.Length == 1) { fvalueNew[k] = 0; } else { fvalueNew[k] = Convert.ToSingle(strValues[1]); } } fvalue = fvalueNew; } else { float aa1 = txtDataList[channelList[j].BNYChannelId][20860]; float aa2 = txtDataList[channelList[j].BNYChannelId][20861]; float aa3 = txtDataList[channelList[j].BNYChannelId][20862]; fvalue = txtDataList[channelList[j].BNYChannelId]; } } else { float aa1 = txtDataList[channelList[j].BNYChannelId][20860]; float aa2 = txtDataList[channelList[j].BNYChannelId][20861]; float aa3 = txtDataList[channelList[j].BNYChannelId][20862]; fvalue = txtDataList[channelList[j].BNYChannelId]; } } else { fvalue = new float[txtDataList[0].Length]; } resultList.Add(fvalue); } citHelper.WriteChannelDataFloat(citPath, resultList); //if (tokenSource.IsCancellationRequested) //{ // throw new OperationCanceledException(); //} } if (realPageCount % ((int)realPageCount) > 0) { startPosition = pageCount * sampleNum + 1; endPosition = lineCount; txtDataList = common.GetTxtData(txtPath, startPosition, endPosition); resultList.Clear(); for (int j = 0; j < channelList.Count; j++) { if (channelList[j].BNYChannelId >= 0) { if (channelList[j].BNYChannelId == 0) { if (channelList[j].dataChannelInfo.sNameEn == "KM") { fvalue = txtDataList[channelList[j].BNYChannelId].Select(p => ((float)(int)p)).ToArray(); } else if (channelList[j].dataChannelInfo.sNameEn == "M") { //fvalue = txtDataList[channelList[j].BNYChannelId].Select(p => (p - (int)p) * 1000).ToArray(); var kmValues = txtDataList[channelList[j].BNYChannelId]; float[] fvalueNew = new float[sampleNum]; for (int k = 0; k < kmValues.Length; k++) { string[] strValues = kmValues[k].ToString("F3").Split('.'); if (strValues.Length == 1) { fvalueNew[k] = 0; } else { fvalueNew[k] = Convert.ToSingle(strValues[1]); } } fvalue = fvalueNew; } else { fvalue = txtDataList[channelList[j].BNYChannelId]; } } else { fvalue = txtDataList[channelList[j].BNYChannelId]; } } else { fvalue = new float[txtDataList[0].Length]; } resultList.Add(fvalue); } citHelper.WriteChannelDataFloat(citPath, resultList); } }
/// <summary> /// 获取BNY数据并向cit文件中写入数据 /// </summary> /// <param name="channelList"></param> private void GetBnyDataAndWriteCit(List <ChannelNew> channelList) { int[] bnyChannelArr = channelList.Where(s => s.BNYChannelId >= 0).Select(s => s.BNYChannelId).ToArray(); int sampleNum = 1000; long startPosition = 0; long endPosition = 0; long bnyFileLength = common.GetBNYLastPosition(bnyFilePath); int pageCount = Convert.ToInt32(bnyFileLength / (sampleNum * BNYFile.GetChannelSize())); List <float[]> bnyList = new List <float[]>(); try { using (FileStream fs = new FileStream(createCitFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) { using (BinaryWriter bw = new BinaryWriter(fs, Encoding.Default)) { DataHeadInfo dhi = citHelper.GetDataInfoHead(createCitFilePath); List <DataChannelInfo> channelInfoList = citHelper.GetDataChannelInfoHead(createCitFilePath); int iChannelNumberSize = dhi.iChannelNumber * 2; byte[] dataArray = new byte[iChannelNumberSize]; List <Byte> dataList = new List <Byte>(); short tmpRmsData = 0;; Byte[] tmpBytes = new Byte[2]; for (int i = 0; i < pageCount; i++) { bnyList = common.GetBNYData(bnyFilePath, sampleNum, startPosition, ref endPosition); startPosition = endPosition; List <float[]> resultList = new List <float[]>(); //Action<float> action = new Action<float>({ }); for (int j = 0; j < channelList.Count; j++) { float[] fvalue = new float[sampleNum]; if (channelList[j].BNYChannelId >= 0) { fvalue = bnyList[channelList[j].BNYChannelId]; } resultList.Add(fvalue); } long iArrayLen = resultList[0].Length; for (int k = 0; k < iArrayLen; k++) { if (citHelper.IsEncrypt(dhi)) { for (int iTmp = 0; iTmp < channelList.Count; iTmp++) { if (channelList[iTmp].BNYChannelId > 6) { tmpRmsData = (short)((resultList[iTmp][k] / 10 - channelInfoList[iTmp].fOffset) * channelInfoList[iTmp].fScale); } else { tmpRmsData = (short)((resultList[iTmp][k] - channelInfoList[iTmp].fOffset) * channelInfoList[iTmp].fScale); } tmpBytes = CitFileHelper.ByteXORByte(BitConverter.GetBytes(tmpRmsData)); dataList.AddRange(tmpBytes); } } else { for (int iTmp = 0; iTmp < channelList.Count; iTmp++) { try { if (channelList[iTmp].BNYChannelId > 6) { tmpRmsData = (short)((resultList[iTmp][k] / 10 - channelInfoList[iTmp].fOffset) * channelInfoList[iTmp].fScale); } else { tmpRmsData = (short)((resultList[iTmp][k] - channelInfoList[iTmp].fOffset) * channelInfoList[iTmp].fScale); } dataList.AddRange(BitConverter.GetBytes(tmpRmsData)); } catch (Exception ex) { throw ex; } } } ///bw.BaseStream.Position = 100; bw.Write(dataList.ToArray()); bw.Flush(); dataList.Clear(); } if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } } } } } catch (Exception ex) { throw ex; } }