96 lines
4.2 KiB
C#
96 lines
4.2 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace File_Folder_Helper.ADO2024.PI1;
|
|
|
|
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<Worker> 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<Worker> logger, List<string> 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;
|
|
}
|
|
|
|
} |