Ejemplo n.º 1
0
        public DataTable PlusMinusMultiplyDivide(DataTable dataIn, double dat, DataProcessMethod oper)
        {
            switch (oper)
            {
            case DataProcessMethod.Plus:    //加
                foreach (DataRow dr in dataIn.Rows)
                {
                    dr[1] = Math.Round(double.Parse(dr[1].ToString()) + dat, 2);
                }
                break;

            case DataProcessMethod.Minus:    //减
                foreach (DataRow dr in dataIn.Rows)
                {
                    dr[1] = Math.Round(double.Parse(dr[1].ToString()) - dat, 2);
                }
                break;

            case DataProcessMethod.Multiply:    //乘
                foreach (DataRow dr in dataIn.Rows)
                {
                    dr[1] = Math.Round(double.Parse(dr[1].ToString()) * dat, 2);
                }
                break;

            case DataProcessMethod.Divide:    //除
                if (dat == 0)
                {
                    break;
                }
                foreach (DataRow dr in dataIn.Rows)
                {
                    dr[1] = Math.Round(double.Parse(dr[1].ToString()) / dat, 2);
                }
                break;

            default:

                break;
            }
            return(dataIn);
        }
Ejemplo n.º 2
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (this.radioGroup.SelectedIndex == -1 || this.textValue.Text == "")
            {
                return;
            }

            try
            {
                progreeValue = double.Parse(this.textValue.Text);
            }
            catch
            {
                progreeValue = double.NaN;
                XtraMessageBox.Show("不是有效的数字", "错误");
                this.textValue.Focus();
                return;
            }
            switch (this.radioGroup.Properties.Items[this.radioGroup.SelectedIndex].ToString())
            {
            case "+":
                this.dpm = DataProcessMethod.Plus;
                break;

            case "-":
                this.dpm = DataProcessMethod.Minus;
                break;

            case "×":
                this.dpm = DataProcessMethod.Multiply;
                break;

            case "÷":
                this.dpm = DataProcessMethod.Divide;
                break;
            }
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
Ejemplo n.º 3
0
        /// <summary>
        ///为未初始化消突跳或台阶做预处理
        /// </summary>
        /// <param name="dataIn"></param>
        /// <param name="datasel"></param>
        /// <param name="oper"></param>
        /// <param name="Num_Sample">采样数</param>
        /// <returns></returns>
        public RemoveTipBean RemoveStepJumpTip(DataTable dataIn, DataTable datasel, DataProcessMethod oper, int Num_Sample, Left_Right LRB)
        {
            RemoveTipBean rt = new RemoveTipBean();

            // Num_Sample = 5;
            try
            {
                DateTime startSel  = DateTime.Parse(datasel.Rows[0][0].ToString());
                DateTime endSel    = DateTime.Parse(datasel.Rows[datasel.Rows.Count - 1][0].ToString());
                double   val_left  = double.Parse(datasel.Rows[0][1].ToString());
                double   val_right = double.Parse(datasel.Rows[datasel.Rows.Count - 1][1].ToString());
                int      tatal     = dataIn.Rows.Count;
                int      select    = datasel.Rows.Count; //选择数据总数
                                                         /*获取相邻观测值差的绝对值最大的两个值对应的序列号*/
                int index_stepL = 0, index_stepR = 0;
                for (int i = 0; i < select - 1; i++)
                {
                    double biggest = 0;
                    double step    = System.Math.Abs(double.Parse(datasel.Rows[i][1].ToString()) - double.Parse(datasel.Rows[i + 1][1].ToString()));
                    if (step > biggest)
                    {
                        index_stepL = i;
                        index_stepR = i + 1;
                        biggest     = step;
                    }
                }
                int index = 0;
                foreach (DataRow dr in dataIn.Rows)
                {
                    if (DateTime.Parse(dr[0].ToString()).CompareTo(startSel) == 0)
                    {
                        index_left = index;
                    }
                    if (DateTime.Parse(dr[0].ToString()).CompareTo(endSel) == 0)
                    {
                        index_right = index;
                        break;
                    }
                    index++;
                }
                //消台阶或消突跳
                switch (oper)
                {
                case DataProcessMethod.RemoveJump:     //消突跳
                {
                    foreach (DataRow dr in dataIn.Rows)
                    {
                        DateTime t = DateTime.Parse(dr[0].ToString());
                        if (t.CompareTo(startSel) < 0)
                        {
                            n_left++;
                        }
                        if ((t.CompareTo(endSel) > 0) && (n_right < Num_Sample))
                        {
                            n_right++;
                            ave_right += double.Parse(dr[1].ToString());
                        }
                    }
                    ave_left = double.Parse(dataIn.Rows[n_left][1].ToString());
                    double cal    = 0;
                    int    n_cal  = 0;
                    int    Sample = Num_Sample;
                    if (n_left > 0)
                    {
                        for (int i = n_left - 1; i >= 0; i--)
                        {
                            if (Sample == 0)
                            {
                                break;
                            }
                            cal += double.Parse(dataIn.Rows[i][1].ToString());
                            n_cal++;
                            Sample--;
                        }
                    }
                    if (n_cal > 0)
                    {
                        ave_left = cal / n_cal;
                    }

                    ave_right = ave_right / n_right;

                    //移动台阶左侧(偏移%f)
                    double left_ave = ave_left;
                    //移动台阶右侧(偏移%f)
                    double right_ave = ave_right;

                    //偏移量选择
                    double var = 0;
                    switch (LRB)
                    {
                    case Left_Right.left:
                        var = ave_left - val_left;
                        break;

                    case Left_Right.right:
                        var = ave_right - val_right;
                        break;

                    case Left_Right.both:
                        var = (ave_left + ave_right) / 2 - (val_left + val_right) / 2;
                        break;

                    default:
                        break;
                    }

                    m_offset = var;

                    //实例化提示信息
                    rt.LeftAve   = "左侧采样平均值(" + Convert.ToString(ave_left) + ")";
                    rt.RightAve  = "右侧采样平均值(" + Convert.ToString(ave_right) + ")";
                    rt.BothAve   = "两侧采样平均值(" + Convert.ToString((ave_left + ave_right) / 2) + ")";
                    rt.TargetNum = "待处理目标数量:" + Convert.ToString(select) + ")";
                    rt.Offset    = m_offset;     //偏移量

                    rt.Tip       = "[突跳消除@" + DateTime.Now.ToShortDateString() + "]\r\n偏移值:" + Math.Round(m_offset, 2).ToString() + "\r\n偏移区间:" + startSel.ToShortDateString() + "-" + endSel.ToShortDateString();
                    TipLeftIndex = n_left;

                    TipRightIndex = n_left + datasel.Rows.Count - 1;
                    Tipstr        = rt.Tip;
                }
                break;

                case DataProcessMethod.RemoveStep:
                    DateTime dateL = DateTime.Parse(datasel.Rows[index_stepL][0].ToString());
                    DateTime dateR = DateTime.Parse(datasel.Rows[index_stepR][0].ToString());
                    //计算消除左台阶起算索引
                    nLeftStep  = index_stepL + index_left; //左
                    nRightStep = nLeftStep + 1;            //消除右侧台阶起算索引

                    //计算左侧平均偏移量
                    int    nL         = 0;
                    double totalright = 0;
                    foreach (DataRow dr in dataIn.Rows)
                    {
                        if (DateTime.Parse(dr[0].ToString()).CompareTo(dateR) >= 0 && nL < Num_Sample)
                        {
                            nL++;
                            totalright += double.Parse(dr[1].ToString());
                        }
                    }
                    ave_left = totalright / nL;
                    //计算右侧平均偏移量
                    int    nR        = 0;
                    double totalleft = 0;
                    int    RSample   = Num_Sample;
                    for (int i = nLeftStep; i >= 0; i--)
                    {
                        if (RSample == 0)
                        {
                            break;
                        }
                        totalleft += double.Parse(dataIn.Rows[i][1].ToString());
                        nR++;
                        RSample--;
                    }

                    ave_right = totalleft / nR;


                    //偏移量
                    m_offset = (LRB == Left_Right.left) ? (ave_left - ave_right) : (ave_right - ave_left);

                    //实例化提示语句
                    rt.LeftAve    = "消除左侧(平均值" + Convert.ToString(ave_left) + ")";
                    rt.RightAve   = "消除右侧(平均值" + Convert.ToString(ave_right) + ")";
                    rt.Totalright = dataIn.Rows.Count - (index_stepL + index_left + 1 + 1);
                    rt.Totaleft   = index_stepL + index_left;
                    rt.Offset     = m_offset;
                    rt.Tip        = "[台阶消除@" + DateTime.Now.ToShortDateString() + "]\r\n偏移值:" + Math.Round(m_offset, 2).ToString();

                    TipLeftIndex  = nLeftStep;
                    TipRightIndex = nLeftStep + datasel.Rows.Count - 1;
                    Tipstr        = rt.Tip;
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                rt = null;
                throw new Exception(ex.Message);
            }
            return(rt);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 根据用户选择进行数据处理(消突跳点或消台阶)
        /// 调用此功能前必须先调用此函数:
        /// RemoveStepJumpTip(DataTable dataIn, DataTable datasel, DataProcessMethod oper)
        /// </summary>
        /// <param name="dataIn"></param>
        /// <param name="datasel"></param>
        /// <param name="oper"></param>
        /// <param name="select"></param>
        /// <returns></returns>
        public DataTable RemoveStepJump(DataTable dataIn, DataTable datasel, DataProcessMethod oper, Left_Right select, bool AddNote, out DataTable Points)
        {
            DataView dataView = dataIn.DefaultView;

            dataView.Sort = "obvdate asc";
            dataIn        = dataView.ToTable();

            DataView dataViewselec = datasel.DefaultView;

            dataViewselec.Sort = "obvdate asc";
            datasel            = dataViewselec.ToTable();

            Points = dataIn.Clone();

            switch (oper)
            {
            case DataProcessMethod.RemoveStep:    //消台阶
                if (select == Left_Right.left)    //消左边台阶
                {
                    //for (int i = dataIn.Rows.Count - 1; i > nLeftStep; i--)
                    //{
                    //    double d = double.Parse(dataIn.Rows[i][1].ToString());
                    //    d = d + m_offset;
                    //    dataIn.Rows[i][1] = Math.Round(d, 2);
                    //}

                    for (int i = 0; i < nLeftStep; i++)
                    {
                        double d = double.Parse(dataIn.Rows[i][1].ToString());
                        d = d + m_offset;
                        dataIn.Rows[i][1] = Math.Round(d, 2);
                    }
                }
                else if (select == Left_Right.right)    //消右边台阶
                {
                    for (int i = nRightStep; i < dataIn.Rows.Count; i++)
                    {
                        double d = double.Parse(dataIn.Rows[i][1].ToString());
                        d = d + m_offset;
                        dataIn.Rows[i][1] = Math.Round(d, 2);
                    }
                }
                for (int i = index_left; i <= index_right; i++)
                {
                    DataRow dr = Points.NewRow();
                    dr[0] = dataIn.Rows[i][0];
                    dr[1] = dataIn.Rows[i][1];
                    Points.Rows.Add(dr);
                }
                break;

            case DataProcessMethod.RemoveJump:    //消突跳
                for (int i = index_left; i <= index_right; i++)
                {
                    double d = double.Parse(dataIn.Rows[i][1].ToString());
                    d = d + m_offset;
                    dataIn.Rows[i][1] = Math.Round(d, 2);

                    DataRow dr = Points.NewRow();
                    dr[0] = dataIn.Rows[i][0];
                    dr[1] = Math.Round(d, 2);
                    Points.Rows.Add(dr);
                }
                break;

            default:
                break;
            }


            if (AddNote)
            {
                if (select == Left_Right.left || select == Left_Right.both)
                {
                    dataIn.Rows[TipLeftIndex][2] = Tipstr + "\r\n" + dataIn.Rows[TipLeftIndex][2].ToString();
                }
                else if (select == Left_Right.right)
                {
                    dataIn.Rows[TipRightIndex][2] = Tipstr + "\r\n" + dataIn.Rows[TipRightIndex][2].ToString();
                }
            }

            DataView dvover = dataIn.DefaultView;

            dvover.Sort = "obvdate asc";
            dataIn      = dvover.ToTable();
            return(dataIn);
        }