构造分钟降水J文件

根据以前《自动气象站采集数据文件格式》J文件格式,随机生成分钟降水文件。

用于公开练习分钟降水,因其属保密内容,故用随机生成以便交流。

随机数已尽量将概率包含。只生成了两个月的,根据需要将开始和结束修改即可得对应的J文件。

cs 复制代码
        private static void Main(string[] args)
        {
            string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "J99999-");
            DateTime startDate = new DateTime(2000, 1, 1, 0, 0, 0);
            DateTime endDate = new DateTime(2000, 2, 28, 23, 0, 0);
            Random r = new Random();

            for (DateTime d = startDate; d <= endDate; d = d.AddMonths(1))//一月一个文件,逐月生成
            {
                StringBuilder sb = new StringBuilder();
                int h = r.Next(5, 10);
                for (int i = 0; i < h; i++)
                {
                    sb.AppendLine(new string((char)(i + '0'), 10 + i));
                }

                h = r.Next(0, 500);//下面控制产生的概率

                if (h == 0)//全月缺测录入"R =<CR>"。
                {
                    sb.AppendLine("R=");
                }
                else if (h <= 3)//全月无降水,录入"R0 =<CR>",
                {
                    sb.AppendLine("R0=");
                }
                else//有降水,决定天或小时
                {
                    sb.AppendLine("R0");
                    int days = DateTime.DaysInMonth(d.Year, d.Month);//该月天数
                    for (int i = 0; i < days; i++)
                    {
                        h = r.Next(0, 500);
                        if (h == 0)//该天缺测
                        {
                            if (i == days - 1)
                            {
                                sb.AppendLine("/=");//最后一天
                            }
                            else
                            {
                                sb.AppendLine("/.");
                            }
                        }
                        else if (h <= 450)//该天无降水,概率大
                        {
                            if (i == days - 1)
                            {
                                sb.AppendLine("=");//最后一天
                            }
                            else
                            {
                                sb.AppendLine(".");
                            }
                        }
                        else //该天有降水
                        {
                            for (int j = 0; j < 24; j++)
                            {
                                h = r.Next(0, 500);
                                if (h == 0)//某小时缺测,稀少
                                {
                                    if (j == 23 & i == days - 1)
                                    {
                                        sb.AppendLine("/=");
                                    }
                                    else if (j == 23)
                                    {
                                        sb.AppendLine("/.");
                                    }
                                    else
                                    {
                                        sb.AppendLine("/,");
                                    }
                                }
                                else if (h < 100)//该小时无降水
                                {
                                    if (j == 23 & i == days - 1)//最后一小时,
                                    {
                                        sb.AppendLine("=");
                                    }
                                    else if (j == 23)
                                    {
                                        sb.AppendLine(".");
                                    }
                                    else
                                    {
                                        sb.AppendLine(",");
                                    }
                                }
                                else//该小时有降水
                                {
                                    int e = r.Next(1, 5);//结尾处降水量,必须保证有量
                                    h = r.Next(1, 60);//该小时降水的长度,不一定非60分钟都降水
                                    int rain;
                                    for (int k = 0; k < h; k++)//构建每小时
                                    {
                                        rain = r.Next(0, 500);
                                        if (rain == 0) sb.Append("//");//增加缺测可能
                                        else if (rain > 60) rain = 0;//增加无降水情况
                                        sb.Append(rain.ToString("D2"));
                                    }
                                    //末尾分钟有效降水
                                    if (j == 23 & i == days - 1)//月末最后一天
                                    {
                                        sb.Append(e.ToString("D2") + "=");
                                    }
                                    else if (j == 23)//非月末,当日最后一小时
                                    {
                                        sb.Append(e.ToString("D2") + ".");
                                    }
                                    else//其它
                                    {
                                        sb.Append(e.ToString("D2") + ",");
                                    }
                                    sb.AppendLine();
                                }
                            }
                        }
                    }
                }
                sb.AppendLine("??????");
                filePath += d.ToString("yyyyMM") + ".txt";
                File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
            }
        }

结果:

相关推荐
IT技术分享社区3 小时前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
△曉風殘月〆10 小时前
WPF MVVM入门系列教程(二、依赖属性)
c#·wpf·mvvm
逐·風11 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
m0_6569747415 小时前
C#中的集合类及其使用
开发语言·c#
九鼎科技-Leo15 小时前
了解 .NET 运行时与 .NET 框架:基础概念与相互关系
windows·c#·.net
九鼎科技-Leo17 小时前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net
.net开发17 小时前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf
小乖兽技术17 小时前
C#与C++交互开发系列(二十):跨进程通信之共享内存(Shared Memory)
c++·c#·交互·ipc
幼儿园园霸柒柒18 小时前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节
平凡シンプル20 小时前
C# EF 使用
c#