private void btnCalResult_Click(object sender, EventArgs e) { sSelectedLayer = cbbSelectedLayerName.SelectedItem.ToString(); List <ItemDicLayerDataStatic> listDicLayer = cIODicLayerDataStatic.readDicLayerData2struct(); ItemDicLayerDataStatic wellInjectLayerdata = listDicLayer.Find(p => p.sJH == this.cbbWellInject.SelectedItem.ToString() && p.sXCM == sSelectedLayer); for (int i = 0; i < dgvInj2Pro.RowCount - 1; i++) { string sJHProdcut = dgvInj2Pro.Rows[i].Cells[1].Value.ToString(); ItemDicLayerDataStatic wellProductLayerdata = listDicLayer.Find(p => p.sJH == sJHProdcut && p.sXCM == sSelectedLayer); //计算井距 double distance = cCalDistance.calDistance2D(wellInjectLayerdata.dbX, wellInjectLayerdata.dbY, wellProductLayerdata.dbX, wellProductLayerdata.dbY); dgvInj2Pro.Rows[i].Cells[2].Value = distance.ToString("0.0"); //根据井号和小层名查累积射开厚度 ItemDicPerforation performItem = cIOinputWellPerforation.getItemByJHandXCM(sJHProdcut, sSelectedLayer); dgvInj2Pro.Rows[i].Cells[3].Value = performItem.fSKHD.ToString("0.0"); //根据井号和小层名查吸水比例 ItemDicInjectProfile profileItem = cIOinputInjectProfile.getItemByJHandXCM(sJHProdcut, sSelectedLayer); dgvInj2Pro.Rows[i].Cells[4].Value = profileItem.fPercentZR.ToString("0.0"); dgvInj2Pro.Rows[i].Cells[5].Value = profileItem.fXSHD.ToString("0.0"); //小层数据表选项 dgvInj2Pro.Rows[i].Cells[6].Value = wellProductLayerdata.fKXD.ToString("0.0"); dgvInj2Pro.Rows[i].Cells[7].Value = wellProductLayerdata.fSTL.ToString("0.0"); dgvInj2Pro.Rows[i].Cells[8].Value = sSelectedLayer; } // cCalDistance.calWellHeadWellDistance(sInjectWellSelected, ltStrSelectedJH, fileName); //cPublicMethodForm.read2DataGridViewByTextFile(fileName, this.dgvInj2Pro); }
public static List <ItemDicPerforation> readPerforateFile(string _sJH) { List <ItemDicPerforation> listReturn = new List <ItemDicPerforation>(); string filePath = Path.Combine(cProjectManager.dirPathWellDir, _sJH, cProjectManager.fileNameWellPerforation); if (File.Exists(filePath)) { using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8)) { String line; int iLine = 0; while ((line = sr.ReadLine()) != null) //delete the line whose legth is 0 { iLine++; if (iLine > 8) //geofile 从8开始 { if (line.TrimEnd() != "") { ItemDicPerforation sttItem = ItemDicPerforation.parseLine(line); if (sttItem.sJH != null) { listReturn.Add(sttItem); } } } } } } return(listReturn); }
public static ItemDicPerforation getItemByJHandXCM(string _sJH, string _xcm) { ItemDicPerforation itemReturn = new ItemDicPerforation(); string filePath = Path.Combine(cProjectManager.dirPathWellDir, _sJH, cProjectManager.fileNameWellPerforation); if (File.Exists(filePath)) { using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8)) { String line; int iLine = 0; while ((line = sr.ReadLine()) != null) //delete the line whose legth is 0 { iLine++; if (iLine > 8) //geofile 从8开始 { if (line.TrimEnd() != "") { ItemDicPerforation sttItem = ItemDicPerforation.parseLine(line); if (sttItem.sJH != null) { if (sttItem.sJH == _sJH && sttItem.sXCM == _xcm) { return(sttItem); } } } } } } } return(itemReturn); }
public float fSKHD; //射开厚度 public static string item2string(ItemDicPerforation item) { List <string> ltStrWrited = new List <string>(); ltStrWrited.Add(item.sJH); ltStrWrited.Add(item.sXCM); ltStrWrited.Add(item.YMstart); ltStrWrited.Add(item.YMend); ltStrWrited.Add(item.fSKHD.ToString()); return(string.Join("\t", ltStrWrited.ToArray())); }
public static ItemDicPerforation parseLine(string line) { string[] split = line.Trim().Split(new char[] { ' ', '\t', ',' }, StringSplitOptions.RemoveEmptyEntries); ItemDicPerforation item = new ItemDicPerforation(); if (split.Length >= 4) { item.sJH = split[0]; item.sXCM = split[1]; item.YMstart = split[2]; item.YMend = split[3]; item.fSKHD = 0.0f; float.TryParse(split[4], out item.fSKHD); } return(item); }
public static void creatWellGeoFile(string _sJH) { creatWellGeoHeadFile(_sJH); string filePath = Path.Combine(cProjectManager.dirPathWellDir, _sJH, cProjectManager.fileNameWellPerforation); List <ItemInputPerforate> listPeforationInput = readInputFile(_sJH); List <string> ltStrLine = new List <string>(); //需要填上 每口井 每个小层的射孔情况 //按井和小层关键字输出,由于处在单井文件夹下,所以 每个文件有井和小层那么多行 //每个小层应该 射孔井段在小层内的fds1和fds2 //但是 由于多数是合层射孔,就需要劈分射孔数据到各个小层了,所以存在交叉问题 //要分不同交叉情况处理 //还有可能全层找不到射孔数据,只能把射孔段顶底深付成成段顶深,射孔时间付成190001 foreach (ItemDicLayerDepth layerItem in cIOinputLayerDepth.readLayerDepth2Struct(_sJH)) { ItemDicPerforation itemDic = new ItemDicPerforation(); itemDic.sJH = layerItem.sJH; itemDic.sXCM = layerItem.sXCM; if (layerItem.fDS1 != layerItem.fDS2) //顶底深一样的是缺失层 { bool bFind = false; float fSKHD = 0; //先把射孔设计付为极大,然后找到后缩小 //目前是 同一层段 不同时期射孔的 只能归到最初时间 itemDic.YMstart = "209912"; //在输入的射孔数据中循环,劈分或者合并射孔段到小层 //相交算法是经典的not算法,移动的顶底全在上 或者 移动的顶底全在参照物下方 即为非交叉 foreach (ItemInputPerforate itemporationInput in listPeforationInput) { if ( !((itemporationInput.fDS2 <= layerItem.fDS1 && itemporationInput.fDS1 <= layerItem.fDS1) || (itemporationInput.fDS1 >= layerItem.fDS2 && itemporationInput.fDS2 >= layerItem.fDS2)) ) //判断交叉 { if (int.Parse(itemporationInput.sYM) <= int.Parse(itemDic.YMstart)) { itemDic.YMstart = itemporationInput.sYM; } float _fDS1 = 0; float _fDS2 = 0; //如果 层段和射孔段交叉,顶深 谁大写谁 底深 谁小写谁,目的是卡在层段内 _fDS1 = (layerItem.fDS1 >= itemporationInput.fDS1) ? layerItem.fDS1 : itemporationInput.fDS1; _fDS2 = (layerItem.fDS2 <= itemporationInput.fDS2) ? layerItem.fDS2 : itemporationInput.fDS2; fSKHD = fSKHD + _fDS2 - _fDS1; bFind = true; } }//end foreach //添加射开数据项 if (bFind == false) { itemDic.fSKHD = 0.0f; itemDic.YMstart = "000000"; itemDic.YMend = "000000"; } else { itemDic.fSKHD = float.Parse(fSKHD.ToString("0.0")); itemDic.YMend = DateTime.Now.ToString("yyyyMM"); } } //end if else //缺失层都付0; { itemDic.fSKHD = 0; itemDic.YMstart = "000000"; itemDic.YMend = "000000"; } ltStrLine.Add(ItemDicPerforation.item2string(itemDic)); } cIOGeoEarthText.addDataLines2GeoEarTxt(filePath, ltStrLine); }