Skip to content

Commit

Permalink
Merge pull request #2 from mcrossley/main
Browse files Browse the repository at this point in the history
v0.1.1
  • Loading branch information
mcrossley committed Dec 13, 2023
2 parents 8dea0bb + b036ce8 commit c63a84c
Show file tree
Hide file tree
Showing 7 changed files with 138 additions and 77 deletions.
2 changes: 1 addition & 1 deletion CreateRecords.csproj
Expand Up @@ -5,7 +5,7 @@
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<AssemblyVersion>$(PackageVersion)</AssemblyVersion>
<FileVersion>$(PackageVersion)</FileVersion>
<Version>0.1.0</Version>
<Version>0.1.1</Version>
<StartupObject>CreateRecords.Program</StartupObject>
<TargetFramework>net48</TargetFramework>
<Authors>Mark Crossley</Authors>
Expand Down
10 changes: 5 additions & 5 deletions Cumulus.cs
Expand Up @@ -27,12 +27,12 @@ class Cumulus
public const double DefaultHiVal = -9999;
public const double DefaultLoVal = 9999;

private StationOptions StationOptions = new StationOptions();
private readonly StationOptions StationOptions = new StationOptions();
internal StationUnits Units = new StationUnits();
private int[] WindDPlaceDefaults = { 1, 0, 0, 0 }; // m/s, mph, km/h, knots
private int[] TempDPlaceDefaults = { 1, 1 };
private int[] PressDPlaceDefaults = { 1, 1, 2 };
private int[] RainDPlaceDefaults = { 1, 2 };
private readonly int[] WindDPlaceDefaults = { 1, 0, 0, 0 }; // m/s, mph, km/h, knots
private readonly int[] TempDPlaceDefaults = { 1, 1 };
private readonly int[] PressDPlaceDefaults = { 1, 1, 2 };
private readonly int[] RainDPlaceDefaults = { 1, 2 };

public Cumulus()
{
Expand Down
182 changes: 116 additions & 66 deletions DayFile.cs
Expand Up @@ -2,8 +2,6 @@
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace CreateRecords
Expand All @@ -15,25 +13,15 @@ class DayFile
public List<Dayfilerec> DayfileRecs = new List<Dayfilerec>();


private string dayFileName = "data" + Path.DirectorySeparatorChar + "dayfile.txt";
private readonly string dayFileName = "data" + Path.DirectorySeparatorChar + "dayfile.txt";

public DayFile()
{
// read in the existing day file

if (File.Exists(dayFileName + ".sav"))
{
Console.WriteLine("The dayfile.txt backup file dayfile.txt.sav already exists, aborting to prevent overwriting the original data.");
Console.WriteLine("Press any key to exit");
Console.ReadKey(true);
Console.WriteLine("Exiting...");
Environment.Exit(1);
}

LoadDayFile();
}


}


public void LoadDayFile()
{
int addedEntries = 0;
Expand Down Expand Up @@ -85,20 +73,77 @@ public void LoadDayFile()
}
else
{
Program.LogMessage("LoadDayFile: No Dayfile found - No entries added to recent daily data list");
// add a rcord for yesterday, just so we have something to process,
// if it is left at default we will not write it out
var newRec = new Dayfilerec();
newRec.Date = DateTime.Today.AddDays(-1);
Program.LogMessage("LoadDayFile: No Dayfile found - No entries added to recent daily data list");
// add a rcord for yesterday, just so we have something to process,
// if it is left at default we will not write it out
var newRec = new Dayfilerec
{
Date = DateTime.Today.AddDays(-1)
};
DayfileRecs.Add(newRec);
}
}

}


// 0 Date in the form dd/mm/yy (the slash may be replaced by a dash in some cases)
// 1 Highest wind gust
// 2 Bearing of highest wind gust
// 3 Time of highest wind gust
// 4 Minimum temperature
// 5 Time of minimum temperature
// 6 Maximum temperature
// 7 Time of maximum temperature
// 8 Minimum sea level pressure
// 9 Time of minimum pressure
// 10 Maximum sea level pressure
// 11 Time of maximum pressure
// 12 Maximum rainfall rate
// 13 Time of maximum rainfall rate
// 14 Total rainfall for the day
// 15 Average temperature for the day
// 16 Total wind run
// 17 Highest average wind speed
// 18 Time of highest average wind speed
// 19 Lowest humidity
// 20 Time of lowest humidity
// 21 Highest humidity
// 22 Time of highest humidity
// 23 Total evapotranspiration
// 24 Total hours of sunshine
// 25 High heat index
// 26 Time of high heat index
// 27 High apparent temperature
// 28 Time of high apparent temperature
// 29 Low apparent temperature
// 30 Time of low apparent temperature
// 31 High hourly rain
// 32 Time of high hourly rain
// 33 Low wind chill
// 34 Time of low wind chill
// 35 High dew point
// 36 Time of high dew point
// 37 Low dew point
// 38 Time of low dew point
// 39 Dominant wind bearing
// 40 Heating degree days
// 41 Cooling degree days
// 42 High solar radiation
// 43 Time of high solar radiation
// 44 High UV Index
// 45 Time of high UV Index
// 46 High Feels like
// 47 Time of high feels like
// 48 Low feels like
// 49 Time of low feels like
// 50 High Humidex
// 51 Time of high Humidex
// 52 Chill hours
// 53 Max Rain 24 hours
// 54 Max Rain 24 hours Time

private Dayfilerec ParseDayFileRec(string data)
{
var st = new List<string>(Regex.Split(data, CultureInfo.CurrentCulture.TextInfo.ListSeparator));
double varDbl;
int varInt;
int idx = 0;

var rec = new Dayfilerec();
Expand All @@ -121,7 +166,7 @@ private Dayfilerec ParseDayFileRec(string data)
rec.TotalRain = Convert.ToDouble(st[idx++]);
rec.AvgTemp = Convert.ToDouble(st[idx++]);

if (st.Count > idx++ && double.TryParse(st[16], out varDbl))
if (st.Count > idx++ && double.TryParse(st[16], out double varDbl))
rec.WindRun = varDbl;

if (st.Count > idx++ && double.TryParse(st[17], out varDbl))
Expand All @@ -130,7 +175,7 @@ private Dayfilerec ParseDayFileRec(string data)
if (st.Count > idx++ && st[18].Length == 5)
rec.HighAvgWindTime = GetDateTime(rec.Date, st[18]);

if (st.Count > idx++ && int.TryParse(st[19], out varInt))
if (st.Count > idx++ && int.TryParse(st[19], out int varInt))
rec.LowHumidity = varInt;

if (st.Count > idx++ && st[20].Length == 5)
Expand Down Expand Up @@ -227,8 +272,11 @@ private Dayfilerec ParseDayFileRec(string data)
rec.HighHumidex = varDbl;

if (st.Count > idx++ && st[51].Length == 5)
rec.HighHumidexTime = GetDateTime(rec.Date, st[51]);

rec.HighHumidexTime = GetDateTime(rec.Date, st[51]);

if (st.Count > idx++ && double.TryParse(st[52], out varDbl))
rec.ChillHours = varDbl;

if (st.Count > idx++ && double.TryParse(st[53], out varDbl))
rec.HighRain24h = varDbl;

Expand All @@ -238,7 +286,7 @@ private Dayfilerec ParseDayFileRec(string data)
}
catch (Exception ex)
{
Program.LogMessage($"ParseDayFileRec: Error at record {idx} - {ex.Message}");
//Program.LogMessage($"ParseDayFileRec: Error at record {idx} - {ex.Message}");
var e = new Exception($"Error at record {idx} = \"{st[idx - 1]}\" - {ex.Message}");
throw e;
}
Expand Down Expand Up @@ -350,51 +398,53 @@ public class Dayfilerec
public DateTime LowFeelsLikeTime;
public double HighHumidex;
public DateTime HighHumidexTime;
public double ChillHours;
public double HighRain24h;
public DateTime HighRain24hTime;

public Dayfilerec()
public Dayfilerec()
{
HighGust = -9999;
HighGust = Cumulus.DefaultHiVal;
HighGustBearing = 0;
LowTemp = 9999;
HighTemp = -9999;
LowPress = 9999;
HighPress = -9999;
HighRainRate = -9999;
TotalRain = -9999;
AvgTemp = -9999;
WindRun = -9999;
HighAvgWind = -9999;
LowHumidity = 9999;
HighHumidity = -9999;
ET = -9999;
SunShineHours = -9999;
HighHeatIndex = -9999;
HighAppTemp = -9999;
LowAppTemp = 9999;
HighHourlyRain = -9999;
LowWindChill = 9999;
HighDewPoint = -9999;
LowDewPoint = 9999;
DominantWindBearing = 9999;
HeatingDegreeDays = -9999;
CoolingDegreeDays = -9999;
HighSolar = -9999;
HighUv = -9999;
HighFeelsLike = -9999;
LowFeelsLike = 9999;
HighHumidex = -9999;
HighRain24h = -9999;
LowTemp = Cumulus.DefaultLoVal;
HighTemp = Cumulus.DefaultHiVal;
LowPress = Cumulus.DefaultLoVal;
HighPress = Cumulus.DefaultHiVal;
HighRainRate = Cumulus.DefaultHiVal;
TotalRain = Cumulus.DefaultHiVal;
AvgTemp = Cumulus.DefaultHiVal;
WindRun = Cumulus.DefaultHiVal;
HighAvgWind = Cumulus.DefaultHiVal;
LowHumidity = (int) Cumulus.DefaultLoVal;
HighHumidity = (int) Cumulus.DefaultHiVal;
ET = Cumulus.DefaultHiVal;
SunShineHours = Cumulus.DefaultHiVal;
HighHeatIndex = Cumulus.DefaultHiVal;
HighAppTemp = Cumulus.DefaultHiVal;
LowAppTemp = Cumulus.DefaultLoVal;
HighHourlyRain = Cumulus.DefaultHiVal;
LowWindChill = Cumulus.DefaultLoVal;
HighDewPoint = Cumulus.DefaultHiVal;
LowDewPoint = Cumulus.DefaultLoVal;
DominantWindBearing = (int) Cumulus.DefaultLoVal;
HeatingDegreeDays = Cumulus.DefaultHiVal;
CoolingDegreeDays = Cumulus.DefaultHiVal;
HighSolar = (int) Cumulus.DefaultHiVal;
HighUv = Cumulus.DefaultHiVal;
HighFeelsLike = Cumulus.DefaultHiVal;
LowFeelsLike = Cumulus.DefaultLoVal;
ChillHours = Cumulus.DefaultHiVal;
HighHumidex = Cumulus.DefaultHiVal;
HighRain24h = Cumulus.DefaultHiVal;
}

public bool HasMissingData()
{
if (HighHumidex == -9999 || LowFeelsLike == 9999 || HighFeelsLike == -9999 || CoolingDegreeDays == -9999 || HeatingDegreeDays == -9999 ||
DominantWindBearing == 9999 || LowDewPoint == 9999 || HighDewPoint == -9999 || LowWindChill == 9999 || HighHourlyRain == -9999 ||
LowAppTemp == 9999 || HighAppTemp == -9999 || HighHeatIndex == -9999 || HighHumidity == -9999 || LowHumidity == 9999 ||
HighAvgWind == -9999 || AvgTemp == -9999 || HighRainRate == -9999 || LowPress == 9999 || HighPress == -9999 ||
HighTemp == -9999 || LowTemp == 9999 || HighGust == -9999 || HighRain24h == -9999
if (HighHumidex == Cumulus.DefaultHiVal || LowFeelsLike == Cumulus.DefaultLoVal || HighFeelsLike == Cumulus.DefaultHiVal || CoolingDegreeDays == Cumulus.DefaultHiVal || HeatingDegreeDays == Cumulus.DefaultHiVal ||
DominantWindBearing == Cumulus.DefaultLoVal || LowDewPoint == Cumulus.DefaultLoVal || HighDewPoint == Cumulus.DefaultHiVal || LowWindChill == Cumulus.DefaultLoVal || HighHourlyRain == Cumulus.DefaultHiVal ||
LowAppTemp == Cumulus.DefaultLoVal || HighAppTemp == Cumulus.DefaultHiVal || HighHeatIndex == Cumulus.DefaultHiVal || HighHumidity == Cumulus.DefaultHiVal || LowHumidity == Cumulus.DefaultLoVal ||
HighAvgWind == Cumulus.DefaultHiVal || AvgTemp == Cumulus.DefaultHiVal || HighRainRate == Cumulus.DefaultHiVal || LowPress == Cumulus.DefaultLoVal || HighPress == Cumulus.DefaultHiVal ||
HighTemp == Cumulus.DefaultHiVal || LowTemp == Cumulus.DefaultLoVal || HighGust == Cumulus.DefaultHiVal || HighRain24h == Cumulus.DefaultHiVal
)
{
return true;
Expand Down
2 changes: 1 addition & 1 deletion Monthly.cs
Expand Up @@ -8,7 +8,7 @@ namespace CreateRecords
class Monthly
{
public List<Records> Recs = new List<Records>(13);
private static string filename = "data" + Path.DirectorySeparatorChar + "monthlyalltime.ini";
private static readonly string filename = "data" + Path.DirectorySeparatorChar + "monthlyalltime.ini";

public Monthly()
{
Expand Down
15 changes: 13 additions & 2 deletions Program.cs
Expand Up @@ -49,8 +49,19 @@ static void Main()
// for each day since records began date
var dayfileStart = dayfile.DayfileRecs.Count > 0 ? dayfile.DayfileRecs[0].Date : DateTime.MaxValue;

LogMessage($"First dayfile record: {dayfileStart:d}");
Console.WriteLine($"First dayfile record: {dayfileStart:d}");
if (dayfileStart == DateTime.MaxValue)
{
LogMessage("No valid day file records found!");
Console.WriteLine("No valid day file records found!");
Console.WriteLine("Exiting...");

Environment.Exit(1);
}
else
{
LogMessage($"First dayfile record: {dayfileStart:d}");
Console.WriteLine($"First dayfile record: {dayfileStart:d}");
}


if (!GetUserConfirmation($"This will attempt to create/update your station weather records from {dayfileStart:D}. Continue? [Y/N]: "))
Expand Down
2 changes: 1 addition & 1 deletion ThisMonth.cs
Expand Up @@ -7,7 +7,7 @@ namespace CreateRecords
class ThisMonth
{
public Records Recs = new Records();
private static string filename = "data" + Path.DirectorySeparatorChar + "month.ini";
private static readonly string filename = "data" + Path.DirectorySeparatorChar + "month.ini";

public ThisMonth()
{
Expand Down
2 changes: 1 addition & 1 deletion ThisYear.cs
Expand Up @@ -7,7 +7,7 @@ namespace CreateRecords
class ThisYear
{
public Records Recs = new Records();
private static string filename = "data" + Path.DirectorySeparatorChar + "year.ini";
private static readonly string filename = "data" + Path.DirectorySeparatorChar + "year.ini";

public ThisYear()
{
Expand Down

0 comments on commit c63a84c

Please sign in to comment.