using Microsoft.Extensions.Logging; using System.Text.RegularExpressions; namespace File_Folder_Helper.Day.Q22024; internal static partial class Helper20240404 { private record MetaData(int DeviceId, string DeviceType, int DeviceNumber, string DescriptionName, string DescriptionTest, string Frequency, string Date); private record CommaSeparatedValuesConfiguration(int Columns, string Directory, int TestIndex, int RegularExpressionGroupCount, string RegularExpressionPattern, string SearchPattern); private static void ParseCSV(CommaSeparatedValuesConfiguration commaSeparatedValuesConfiguration, ILogger logger) { string line; string test; string[] lines; string[] columns; MetaData? metaData; string fileNameWithoutExtension; string[] files = Directory.GetFiles(commaSeparatedValuesConfiguration.Directory, commaSeparatedValuesConfiguration.SearchPattern, SearchOption.TopDirectoryOnly); logger.LogInformation(files.Length.ToString()); foreach (string file in files) { fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); metaData = GetMetaData(commaSeparatedValuesConfiguration, fileNameWithoutExtension); if (metaData is null) continue; lines = File.ReadAllLines(file); if (lines.Length < 2) continue; line = lines[0]; columns = line.Split('"'); if (columns.Length != commaSeparatedValuesConfiguration.Columns) continue; test = columns[commaSeparatedValuesConfiguration.TestIndex].Trim().Trim('"'); if (test.IndexOf(metaData.DescriptionTest, 0, StringComparison.CurrentCultureIgnoreCase) == -1) continue; for (int i = 1; i < lines.Length; i++) { line = lines[i]; if (line.Length < 1) continue; columns = line.Split(',').Select(l => l.Trim().Trim('"')).ToArray(); if (columns.Length != commaSeparatedValuesConfiguration.Columns) continue; } } } internal static void ParseCSV(ILogger logger, List args) { string directory = args[0]; string regularExpressionPattern = args[2]; string regularExpressionGroupCount = args[3]; string searchPattern = args[4]; string columns = args[5]; string testIndex = args[6]; logger.LogInformation(directory); CommaSeparatedValuesConfiguration commaSeparatedValuesConfiguration = new(int.Parse(columns), directory, int.Parse(testIndex), int.Parse(regularExpressionGroupCount), regularExpressionPattern, searchPattern); ParseCSV(commaSeparatedValuesConfiguration, logger); } private static MetaData? GetMetaData(CommaSeparatedValuesConfiguration commaSeparatedValuesConfiguration, string fileNameWithoutExtension) { MetaData? result; Match match = Regex.Match(fileNameWithoutExtension, commaSeparatedValuesConfiguration.RegularExpressionPattern); if (!match.Success || match.Groups.Count != commaSeparatedValuesConfiguration.RegularExpressionGroupCount) result = null; else { int deviceId = int.Parse(match.Groups["DeviceId"].Value); int deviceNumber = int.Parse(match.Groups["DeviceNumber"].Value); result = new(deviceId, match.Groups["DeviceType"].Value, deviceNumber, match.Groups["DescriptionName"].Value, match.Groups["DescriptionTest"].Value, match.Groups["Frequency"].Value, match.Groups["Date"].Value); } return result; } }