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

结果:

相关推荐
军训猫猫头1 分钟前
20.抽卡只有金,带保底(WPF) C#
ui·c#·wpf
向宇it10 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
向宇it12 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
坐井观老天16 小时前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
pchmi19 小时前
C# OpenCV机器视觉:模板匹配
opencv·c#·机器视觉
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭20 小时前
C#都可以找哪些工作?
开发语言·c#
boligongzhu1 天前
Dalsa线阵CCD相机使用开发手册
c#
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则
sukalot1 天前
windows C#-命名实参和可选实参(下)
windows·c#