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

结果:

相关推荐
七七墨染34 分钟前
DotMemory系列:5. 如何实现自动化抓取和应用自托管
运维·c#·自动化
王家羽翼-王羽2 小时前
C# 连接 PLC 的S7西门子协议读写,样例分享
c#
斯内科2 小时前
C#进行CAN【控制器局域网】通讯
c#·can·pcanbasic.net
张人玉4 小时前
C#WPF——MVVM框架编写管理系统所遇到的问题
开发语言·c#·wpf·mvvm框架
马达加斯加D5 小时前
C# --- 如何写UT
前端·c#·log4j
Charles_go5 小时前
C#中级39、什么是依赖注入设计模式
java·设计模式·c#
eggcode6 小时前
C#开源库ACadSharp将Dwg转Dxf
c#·dxf·dwg
拼好饭和她皆失6 小时前
C#学习入门
开发语言·学习·c#
小小编程能手8 小时前
大小端字节序
c#
冒泡P10 小时前
【Unity】TextMeshPro富文本中使用精灵图集
ui·unity·c#·游戏引擎