// 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("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() .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("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("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); } } } } }