示例#1
0
        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);
        }
示例#4
0
        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()));
        }
示例#5
0
        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);
        }