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

结果:

相关推荐
江沉晚呤时7 小时前
在 C# 中调用 Python 脚本:实现跨语言功能集成
python·microsoft·c#·.net·.netcore·.net core
Oberon7 小时前
Avalonia硬配.NET Framework 4.8
c#·.net·avalonia·.net framework
喵叔哟10 小时前
3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
c#·.netcore
钢铁男儿12 小时前
C# 接口(接口可以继承接口)
java·算法·c#
小码编匠20 小时前
C# 的西门子数控系统 OPCUA 数据采集开发从零入门
后端·数据分析·c#
孜然卷k20 小时前
C#项目 在Vue/React前端项目中 使用使用wkeWebBrowser引用并且内部使用iframe网页外链 页面部分白屏
前端·vue.js·react.js·c#
专注VB编程开发20年21 小时前
C# VB.NET多进程-管道通信,命名管道(Named Pipes)
开发语言·c#·.net
唐青枫1 天前
C#.NET 泛型详解
c#·.net
阿蒙Amon1 天前
C#日期、时间和时区:全球化应用的时间处理艺术
java·服务器·c#
学不动CV了1 天前
深入理解C语言内存空间、函数指针(三)(重点是函数指针)
c语言·arm开发·数据库·stm32·单片机·嵌入式硬件·c#