using System.Collections.ObjectModel; using System.Text.RegularExpressions; using Microsoft.Extensions.Logging; namespace File_Folder_Helper.ADO2025.PI6; internal static partial class Helper20250710 { [GeneratedRegex(@"^(?S[0-9]{1,2})(?F[0-9]{1,2}) W-Bit=(?[01])")] private static partial Regex StreamFunction(); internal static void StripLog(ILogger logger, List args) { logger.LogInformation(args[0]); logger.LogInformation(args[1]); logger.LogInformation(args[2]); logger.LogInformation(args[3]); string[] segments; string searchPattern = args[3]; string directoryPattern = args[2]; string sourceDirectory = Path.GetFullPath(args[0].Split('~')[0]); string[] directories = Directory.GetDirectories(sourceDirectory, directoryPattern, SearchOption.TopDirectoryOnly); LogToTrace(logger, sourceDirectory, searchPattern, directories.AsReadOnly()); Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, sourceDirectory); } private static void LogToTrace(ILogger logger, string sourceDirectory, string searchPattern, ReadOnlyCollection directories) { string text; string[] lines; string[] files; string checkFile; FileInfo fileInfo; string directoryName; const string extension = ".trc"; foreach (string directory in directories) { files = Directory.GetFiles(directory, searchPattern, SearchOption.TopDirectoryOnly); foreach (string file in files) { fileInfo = new(file); if (fileInfo.LastWriteTime > DateTime.Now.AddSeconds(-5)) { continue; } directoryName = Path.GetFileName(fileInfo.DirectoryName); checkFile = Path.Combine(directoryName, $"{fileInfo.Name}{extension}"); if (File.Exists(checkFile)) { continue; } lines = File.ReadAllLines(fileInfo.FullName); LogToTrace(logger, fileInfo, lines, checkFile); } } } private static void LogToTrace(ILogger logger, FileInfo fileInfo, string[] lines, string checkFile) { string line; Match match; string body; string[] segments; string previousLine; List log = []; for (int i = 1; i < lines.Length - 1; i++) { line = lines[i]; if (!line.StartsWith('S')) { continue; } match = StreamFunction().Match(line); if (!match.Success) { continue; } segments = lines[i - 1].Split(" "); if (segments.Length < 2) { continue; } if (!segments[0].Contains(' ')) { continue; } body = GetBody(lines, i, segments[0].Split(' ')); log.Add($"{segments[0]} {line} ~ {body}"); } if (log.Count > 0) { File.WriteAllText(checkFile, string.Join(Environment.NewLine, log)); File.SetLastWriteTime(checkFile, fileInfo.LastWriteTime); logger.LogInformation("<{checkFile}> was written", checkFile); } } private static string GetBody(string[] lines, int i, string[] segments) { string result; List results = []; for (int j = i + 1; j < lines.Length; j++) { if (lines[j].StartsWith(segments[0])) break; results.Add(lines[j].Trim()); } result = string.Join('_', results); return result; } }