c#处理气温数据大于阀值连续日期的统计(包括降水统计等都可以使用)

    最近帮朋友处理气温数据,在结束之后想想可以整理整理,希望对需要的人有帮助。本人选择使用c#在vs10下,对txt格式的近30多年的日气温数据进行读取,并存储在本地数据库中。由于本人的数据库水平比较有限,本人尽量避免了使用复杂的sql语言,使用到的都是基本的选择语句。在此基础上,对本地数据库进行访问读取,使用datatable(这种方式比较耗内存,因为把简单处理后表都存在了内存中)对数据进行处理可以得出阀值、以及站点的其他数据,并存为临时数据,此次最终需要的是大于阀值连续日数统计,所以在datatable下对  按照阀值筛选后的数据进行日前排序,得到新表,在此基础上只要运用算法对其进行统计即可。如下是部分统计数据的代码。

                string consqlserver = "Data Source=.;Initial Catalog=xiyuanTabels;Integrated Security=True;";


                SqlConnection objConnection = new SqlConnection(consqlserver);
                string sql = "select * from xiyuanTabels.dbo.T_table where T_table.区站号 = " + cur[i] + "order by T_table.日最高气温 ";
                SqlDataAdapter sda = new SqlDataAdapter(sql, objConnection);
                DataSet ds = new DataSet();
                sda.Fill(ds, "user");
                DataTable dt = ds.Tables[0];
                int num = Convert.ToInt32(Convert.ToSingle(dt.Rows.Count) * 0.95f); //  所有逐日气温数据排序确定其95百分位,可以确定阀值哦~
                          
                pdatatable.Rows.Clear();
                for (int iv = num; iv < dt.Rows.Count; iv++)
                {
                  
                    DataRow m_pDataRow = pdatatable.NewRow();
                    m_pDataRow["区站号"] = dt.Rows[iv]["区站号"];
                    m_pDataRow["纬度"] = dt.Rows[iv]["纬度"];
                    m_pDataRow["经度"] = dt.Rows[iv]["经度"];
                    m_pDataRow["观测场拔海高度"] = dt.Rows[iv]["观测场拔海高度"];
                    m_pDataRow["日期"] = Convert.ToDateTime(dt.Rows[iv]["日期"].ToString()).ToString("yyyyMMdd"); ;
                    m_pDataRow["平均气温"] = dt.Rows[iv]["平均气温"];
                    m_pDataRow["日最高气温"] = dt.Rows[iv]["日最高气温"];
                    m_pDataRow["日最低气温"] = dt.Rows[iv]["日最低气温"];
                    pdatatable.Rows.Add(m_pDataRow);
                    
                }
                
                dtCopy = pdatatable.Copy();


                DataView dv = pdatatable.DefaultView;//利用datatable按日期排序
                dv.Sort = "日期";
                dtCopy = dv.ToTable();

                 int k = 0;
                for (int samei = 1; samei < dtCopy.Rows.Count - 1; samei++)
                {
         
                    DateTime d1 = DateTime.ParseExact(dtCopy.Rows[samei]["日期"].ToString(), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
                    DateTime d2 = DateTime.ParseExact(dtCopy.Rows[samei+1]["日期"].ToString(), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
        
                    //求两个时间差
                    TimeSpan ND = d2 - d1;
                    //求两个时间的分钟差
                    int Aday = ND.Days;


                    if (Aday == 1)
                    {                   
                        k++;
              
                    }
                    else
                    {
                    
                            if (k >= 2)//连续日数(可进行调节)控制你需要连续几日的数据 此处的2表示连续3天及以上的日期
                            {
                                DataRow m_pDataRow = pdatatableend.NewRow(); //下面是获取该站点的基本数据 和最后日期
                                m_pDataRow["区站号"] = dtCopy.Rows[samei - 1]["区站号"];
                                m_pDataRow["纬度"] = dtCopy.Rows[samei - 1]["纬度"];
                                m_pDataRow["经度"] = dtCopy.Rows[samei - 1]["经度"];
                                m_pDataRow["观测场拔海高度"] = dtCopy.Rows[samei - 1]["观测场拔海高度"];
                                m_pDataRow["日期"] = d1;
                                m_pDataRow["平均气温"] = dtCopy.Rows[samei - 1]["平均气温"];
                                m_pDataRow["日最高气温"] = dtCopy.Rows[samei - 1]["日最高气温"];
                                m_pDataRow["日最低气温"] = dtCopy.Rows[samei - 1]["日最低气温"];
                                m_pDataRow["出现次数"] = (k + 1).ToString();//连续日数的统计数据
                                pdatatableend.Rows.Add(m_pDataRow);
                                k = 0;
                          
                          
                            
                           }  
  


                    }












                }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值