Download SSL Certificates Sort Subtasks of Markdown files Test BioRad EAF CopyDirectories json to Markdown Sort Day 2024 Q2 GitRemoteRemove Handle directoryInfo.LinkTarget better Remove StartAt Handle directoryInfo.LinkTarget
96 lines
4.2 KiB
C#
96 lines
4.2 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace File_Folder_Helper.Day;
|
|
|
|
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;
|
|
}
|
|
|
|
} |