构造分钟降水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);
            }
        }

结果:

相关推荐
人工智能AI技术1 小时前
【C#程序员入门AI】本地大模型落地:用Ollama+C#在本地运行Llama 3/Phi-3,无需云端
人工智能·c#
MyBFuture5 小时前
C#数组详解:一维二维与交错数组
开发语言·windows·c#·visual studio·vision pro
有来技术6 小时前
ASP.NET Core 权限管理系统(RBAC)设计与实现|vue3-element-admin .NET 后端
vue.js·后端·c#·asp.net·.net
张人玉8 小时前
C#WinFrom中show和ShowDialog的区别
开发语言·microsoft·c#
m0_748233178 小时前
C#:微软的现代编程利器
开发语言·microsoft·c#
Traced back8 小时前
SQL Server数据自动清理系统最终版(C# WinForms完整源码)
数据库·c#·.net
人工智能AI技术9 小时前
【C#程序员入门AI】Microsoft Extensions for AI (MEAI):统一LLM调用接口,告别厂商绑定
人工智能·c#
William_cl10 小时前
C# ASP.NET路由系统全解析:传统路由 vs 属性路由,避坑 + 实战一网打尽
开发语言·c#·asp.net
初九之潜龙勿用1 天前
C# 操作Word模拟解析HTML标记之背景色
开发语言·c#·word·.net·office