Files
2023-05-05 19:15:48 +02:00

131 lines
4.7 KiB
C#

// See https://aka.ms/new-console-template for more information
using MapoDataFiller;
using MapoDataFiller.Filler;
using Spectre.Console;
AnsiConsole.Write(
new FigletText("MapoDataFiller")
.LeftAligned()
.Color(Color.Blue1));
var rule = new Rule("[green]Setup data[/]");
rule.Alignment = Justify.Left;
AnsiConsole.Write(rule);
// recupero configurazione...
MConf currConf = new MConf();
if (File.Exists("conf.yaml"))
{
currConf = CMan.readConf("conf.yaml");
}
AnsiConsole.WriteLine();
AnsiConsole.MarkupLineInterpolated($"Conf ConfDir: [yellow]{currConf.ConfDir}[/]");
var pathOk = AnsiConsole.Confirm("Confermi ConfDir?");
while (!pathOk)
{
currConf.ConfDir = AnsiConsole.Ask<string>("Inserisci ConfDir desiderato:");
AnsiConsole.WriteLine(currConf.ConfDir);
pathOk = AnsiConsole.Confirm("Confermi ConfDir?");
}
// ora leggo i file di conf yaml e presento opzione...
if (!Directory.Exists(currConf.ConfDir))
{
// segnalo errore, credo directory
AnsiConsole.WriteLine("Conf directory not found! exiting...");
Directory.CreateDirectory(currConf.ConfDir);
}
else
{
// leggo elenco file yaml e presento alternativa
var fileOpt = Directory.GetFiles(currConf.ConfDir, "*.yaml");
if (fileOpt.Length == 0)
{
AnsiConsole.WriteLine("Sim Conf file not found, exiting!");
}
else
{
var fileSel = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Quale file vuoi [green]processare[/]?")
.PageSize(10)
.MoreChoicesText("[grey](Usare up/down per scorrere)[/]")
.AddChoices(fileOpt));
// leggo la conf del file selezionato...
if (!string.IsNullOrEmpty(fileSel))
{
currConf = CMan.readConf(fileSel);
#if false
// procedo come prima
AnsiConsole.MarkupLineInterpolated($"Conf FillMode: [yellow]{currConf.FillMode}[/]");
var fillOK = AnsiConsole.Confirm("Confermi FillMode?");
while (!fillOK)
{
currConf.FillMode = AnsiConsole.Ask<string>("Inserisci il modo desiderato:");
AnsiConsole.WriteLine(currConf.FillMode);
fillOK = AnsiConsole.Confirm("Confermi FillMode?");
}
AnsiConsole.MarkupLineInterpolated($"Conf HasHeader: [yellow]{currConf.HasHeader}[/]");
var headOK = AnsiConsole.Confirm("Confermi HasHeader?");
while (!headOK)
{
currConf.HasHeader = AnsiConsole.Ask<bool>("HasHeader (true/false)?");
AnsiConsole.WriteLine(currConf.HasHeader);
headOK = AnsiConsole.Confirm("Confermi HasHeader?");
}
#endif
// leggo timetable
string filePath = Path.Combine(currConf.ConfDir, currConf.TimeTable);
if (File.Exists(filePath))
{
var righe = File.ReadAllLines(filePath).ToList();
// se devo saltare
if (currConf.HasHeader)
{
righe = righe.Skip(1).ToList();
}
// svuoto cartella output
if (!Directory.Exists(currConf.OutFolder))
{
Directory.CreateDirectory(currConf.OutFolder);
}
var fileList = Directory.GetFiles(currConf.OutFolder);
foreach (var file in fileList)
{
File.Delete(file);
}
// verifico quale oggetto sim avviare... x ora SOLO interclays
InterClays currSim = new InterClays();
// ciclo su ogni record
foreach (var riga in righe)
{
// recupero dati del giorno corrente
var giornata = new DayConf("CsvDateDur", riga);
var simDataBlock = currSim.GetDataRows(currConf.CodIOB, giornata);
// scrivo sul file annuale i dati del singolo giorno...
string pathFileFL = Path.Combine(currConf.OutFolder, $"{currConf.CodIOB}_FL_{giornata.dtStart:yyyy}.csv");
if (!File.Exists(pathFileFL))
{
File.WriteAllText(pathFileFL, "");
}
string pathFileEL = Path.Combine(currConf.OutFolder, $"{currConf.CodIOB}_EL_{giornata.dtStart:yyyy}.csv");
if (!File.Exists(pathFileEL))
{
File.WriteAllText(pathFileEL, "");
}
// vado in append...
File.AppendAllLines(pathFileFL, simDataBlock.FlList);
File.AppendAllLines(pathFileEL, simDataBlock.EvList);
}
}
}
}
}