根据以前《自动气象站采集数据文件格式》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);
}
}
结果: