java-script-object-notation-to-reactor (Day-Helper-2025-07-09) Dynamic extension for (Day-Helper-2025-07-01)
98 lines
3.7 KiB
C#
98 lines
3.7 KiB
C#
using System.Collections.ObjectModel;
|
|
using System.Text.RegularExpressions;
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace File_Folder_Helper.ADO2025.PI6;
|
|
|
|
internal static partial class Helper20250710 {
|
|
|
|
[GeneratedRegex(@"^(?<stream>S[0-9]{1,2})(?<function>F[0-9]{1,2}) W-Bit=(?<wait>[01])")]
|
|
private static partial Regex StreamFunction();
|
|
|
|
internal static void StripLog(ILogger<Worker> logger, List<string> 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<Worker> logger, string sourceDirectory, string searchPattern, ReadOnlyCollection<string> 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<Worker> logger, FileInfo fileInfo, string[] lines, string checkFile) {
|
|
string line;
|
|
Match match;
|
|
string body;
|
|
string[] segments;
|
|
string previousLine;
|
|
List<string> 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<string> 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;
|
|
}
|
|
|
|
} |