Compare commits
	
		
			2 Commits
		
	
	
		
			9f4286e3e9
			...
			9d612d3d3d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9d612d3d3d | |||
| 3070fee04c | 
							
								
								
									
										25
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -13,17 +13,26 @@ | ||||
|             "args": [ | ||||
|                 "s", | ||||
|                 "X", | ||||
|                 "Y:/TRendlog", | ||||
|                 "Day-Helper-2025-01-14", | ||||
|                 "New folder*|202*", | ||||
|                 "yyyy-MM-dd", | ||||
|                 "444", | ||||
|                 "555", | ||||
|                 "D:/5-Other-Small/Proxmox/ffnm", | ||||
|                 "Day-Helper-2025-01-26", | ||||
|                 "*.txt", | ||||
|                 "MM/dd/yy", | ||||
|                 "Statement Period", | ||||
|                 "WOODS,JASON P", | ||||
|                 "666", | ||||
|                 "777", | ||||
|                 "888", | ||||
|                 "999" | ||||
|             ], | ||||
|                 "999", | ||||
|                 "s", | ||||
|                 "P", | ||||
|                 "D:/5-Other-Small/Proxmox/ffnm", | ||||
|                 "-d", | ||||
|                 "L:/DevOps/Mesa_FI/File-Folder-Helper/.vscode", | ||||
|                 "-k", | ||||
|                 "Mike", | ||||
|                 "-p", | ||||
|                 "S" | ||||
|               ], | ||||
|             "cwd": "${workspaceFolder}", | ||||
|             "console": "integratedTerminal", | ||||
|             "stopAtEntry": false | ||||
|  | ||||
							
								
								
									
										2
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -27,11 +27,13 @@ | ||||
|       "Kanban", | ||||
|       "kanbn", | ||||
|       "Kofax", | ||||
|       "Linc", | ||||
|       "mesfs", | ||||
|       "NpgSql", | ||||
|       "NSFX", | ||||
|       "OBJE", | ||||
|       "onenote", | ||||
|       "PDFC", | ||||
|       "Permyriad", | ||||
|       "pged", | ||||
|       "Phares", | ||||
|  | ||||
							
								
								
									
										93
									
								
								ADO2025/PI4/Helper-2025-01-26.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								ADO2025/PI4/Helper-2025-01-26.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,93 @@ | ||||
| using Microsoft.Extensions.Logging; | ||||
| using System.Collections.ObjectModel; | ||||
| using System.Globalization; | ||||
|  | ||||
| namespace File_Folder_Helper.ADO2025.PI4; | ||||
|  | ||||
| internal static partial class Helper20250126 | ||||
| { | ||||
|  | ||||
|     private static void Move(string file, string fileName, string checkFile, List<string> foundLines, ReadOnlyCollection<DateTime> dateTimes) | ||||
|     { | ||||
|         string checkDirectory = Path.Combine(Path.GetDirectoryName(file) ?? throw new Exception(), dateTimes[0].ToString("yyyy-MM")); | ||||
|         if (!Directory.Exists(checkDirectory)) | ||||
|             _ = Directory.CreateDirectory(checkDirectory); | ||||
|         string fileNameB = Path.GetFileName(checkFile); | ||||
|         string checkFileB = Path.Combine(checkDirectory, fileName); | ||||
|         string checkFileC = Path.Combine(checkDirectory, fileNameB); | ||||
|         string contents = string.Join(Environment.NewLine, foundLines); | ||||
|         string checkFileD = Path.Combine(checkDirectory, $"{fileName}.txt"); | ||||
|         if (!File.Exists(checkFileB)) | ||||
|             File.Move(file, checkFileB); | ||||
|         if (!File.Exists(checkFileC)) | ||||
|             File.Move(checkFile, checkFileC); | ||||
|         File.WriteAllText(checkFileD, contents); | ||||
|     } | ||||
|  | ||||
|     private static void Move(ILogger<Worker> logger, string dateFormat, string file, string checkFile, string fileName, ReadOnlyCollection<string> statementPeriodSegments, List<string> foundLines) | ||||
|     { | ||||
|         DateTime dateTime; | ||||
|         List<DateTime> dateTimes = []; | ||||
|         foreach (string check in statementPeriodSegments) | ||||
|         { | ||||
|             if (!DateTime.TryParseExact(check, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) | ||||
|                 continue; | ||||
|             dateTimes.Add(dateTime); | ||||
|         } | ||||
|         if (dateTimes.Count != 2) | ||||
|             logger.LogInformation($"Only {dateTimes.Count} date(s) were found in <{fileName}>!"); | ||||
|         else | ||||
|             Move(file, fileName, checkFile, foundLines, dateTimes.AsReadOnly()); | ||||
|     } | ||||
|  | ||||
|     private static void Move(ILogger<Worker> logger, string file, string checkFile, string dateFormat, string statementPeriod, string search) | ||||
|     { | ||||
|         List<string> foundLines = []; | ||||
|         bool statementPeriodFound = false; | ||||
|         string[]? statementPeriodSegments = null; | ||||
|         string fileName = Path.GetFileName(file); | ||||
|         string[] lines = File.ReadAllLines(file); | ||||
|         foreach (string line in lines) | ||||
|         { | ||||
|             if (statementPeriodSegments is not null) | ||||
|             { | ||||
|                 if (line.Contains(search)) | ||||
|                     foundLines.Add(line); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 if (statementPeriodFound) | ||||
|                 { | ||||
|                     statementPeriodSegments = line.Split(' '); | ||||
|                     continue; | ||||
|                 } | ||||
|                 if (!line.Contains(statementPeriod)) | ||||
|                     continue; | ||||
|                 statementPeriodFound = true; | ||||
|             } | ||||
|         } | ||||
|         if (statementPeriodSegments is null || statementPeriodSegments.Length < 4) | ||||
|             logger.LogInformation($"{nameof(statementPeriod)}: {statementPeriod}; wasn't found in <{fileName}>!"); | ||||
|         else | ||||
|             Move(logger, dateFormat, file, checkFile, fileName, statementPeriodSegments.AsReadOnly(), foundLines); | ||||
|     } | ||||
|  | ||||
|     internal static void Move(ILogger<Worker> logger, List<string> args) | ||||
|     { | ||||
|         string checkFile; | ||||
|         string search = args[5]; | ||||
|         string dateFormat = args[3]; | ||||
|         string searchPatterns = args[2]; | ||||
|         string statementPeriod = args[4]; | ||||
|         string sourceDirectory = Path.GetFullPath(args[0]); | ||||
|         string[] files = Directory.GetFiles(sourceDirectory, searchPatterns, SearchOption.AllDirectories); | ||||
|         foreach (string file in files) | ||||
|         { | ||||
|             checkFile = Path.ChangeExtension(file, ".pdf"); | ||||
|             if (!File.Exists(checkFile)) | ||||
|                 continue; | ||||
|             Move(logger, file, checkFile, dateFormat, statementPeriod, search); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -129,6 +129,8 @@ internal static class HelperDay | ||||
|             ADO2025.PI4.Helper20250101.MoveToDelete(logger, args); | ||||
|         else if (args[1] == "Day-Helper-2025-01-14") | ||||
|             ADO2025.PI4.Helper20250114.Rename(logger, args); | ||||
|         else if (args[1] == "Day-Helper-2025-01-26") | ||||
|             ADO2025.PI4.Helper20250126.Move(logger, args); | ||||
|         else | ||||
|             throw new Exception(appSettings.Company); | ||||
|     } | ||||
|  | ||||
| @ -1177,36 +1177,6 @@ internal static partial class HelperMarkdown | ||||
|         return new(result?.MarkdownFile, result?.Lines, result?.MarkdownFile.H1, result is null ? null : Path.GetRelativePath(markdownFile.Directory, Path.GetFullPath(result.MarkdownFile.File))); | ||||
|     } | ||||
|  | ||||
|     private static List<string> GetTaskArgumentsForDayHelper20240623(Input input) | ||||
|     { | ||||
|         if (string.IsNullOrEmpty(input.Destination)) | ||||
|             throw new NotSupportedException(); | ||||
|         List<string> results = []; | ||||
|         string? vscodeDirectory = Path.GetDirectoryName(input.Destination); | ||||
|         string? taskFile = vscodeDirectory is null ? null : Path.Combine(vscodeDirectory, "tasks.json"); | ||||
|         if (!string.IsNullOrEmpty(taskFile) && File.Exists(taskFile)) | ||||
|         { | ||||
|             string json = File.ReadAllText(taskFile); | ||||
|             VSCodeTasks? vsCodeTasks = JsonSerializer.Deserialize(json, VSCodeTasksSourceGenerationContext.Default.VSCodeTasks); | ||||
|             if (vsCodeTasks is not null && vsCodeTasks.TaskCollection is not null) | ||||
|             { | ||||
|                 foreach (VSCodeTask vsCodeTask in vsCodeTasks.TaskCollection) | ||||
|                 { | ||||
|                     if (vsCodeTask.Arguments is null || vsCodeTask.Arguments.Count < 4 || vsCodeTask.Arguments[3] != "Day-Helper-2024-06-23") | ||||
|                         continue; | ||||
|                     if (results.Count > 0) | ||||
|                     { | ||||
|                         results.Clear(); | ||||
|                         break; | ||||
|                     } | ||||
|                     results.AddRange(vsCodeTask.Arguments.Skip(2)); | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return results; | ||||
|     } | ||||
|  | ||||
|     internal static void MarkdownWikiLinkVerification(AppSettings appSettings, ILogger<Worker> logger, List<string> args, CancellationToken cancellationToken) | ||||
|     { | ||||
|         int updated; | ||||
| @ -1251,12 +1221,7 @@ internal static partial class HelperMarkdown | ||||
|             logger.LogInformation("{updated} Markdown file(s) were updated", updated); | ||||
|         } | ||||
|         if (!string.IsNullOrEmpty(input.Destination)) | ||||
|         { | ||||
|             SaveColumnToCards(input, relativeToCollection); | ||||
|             List<string> taskArgumentsForDayHelper20240623 = GetTaskArgumentsForDayHelper20240623(input); | ||||
|             if (taskArgumentsForDayHelper20240623.Count > 0) | ||||
|                 HelperDay.Select(appSettings, logger, taskArgumentsForDayHelper20240623, cancellationToken: CancellationToken.None); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -10,6 +10,11 @@ internal static class HelperPdfStripperWrapper | ||||
|                          string? Key, | ||||
|                          char? Parser); | ||||
|  | ||||
|     private const char _Linc = 'L'; | ||||
|     private const char _Ghost = 'G'; | ||||
|     private const char _Kofax = 'K'; | ||||
|     private const char _Stripper = 'S'; | ||||
|  | ||||
|     private static string GetTextFromPDF(string pdfTextStripperFileName, string sourceFileNamePdf, string destinationFileName) | ||||
|     { | ||||
|         string result; | ||||
| @ -28,14 +33,27 @@ internal static class HelperPdfStripperWrapper | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static string GetLincTextFromPDF(string lincPDFCFileName, string sourceFileNamePdf, string destinationFileName) | ||||
|     { | ||||
|         string result; | ||||
|         if (File.Exists(destinationFileName)) | ||||
|             File.Delete(destinationFileName); | ||||
|         string arguments = string.Concat("-i \"", sourceFileNamePdf, "\" -o \"", destinationFileName, "\""); | ||||
|         Process? process = Process.Start(lincPDFCFileName, arguments); | ||||
|         _ = process?.WaitForExit(30000); | ||||
|         if (!File.Exists(destinationFileName)) | ||||
|             result = string.Empty; | ||||
|         else | ||||
|             result = File.ReadAllText(destinationFileName); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     private static string GetGhostTextFromPDF(string ghostPCLFileName, string sourceFileNamePdf, string destinationFileName) | ||||
|     { | ||||
|         string result; | ||||
|         if (File.Exists(destinationFileName)) | ||||
|             File.Delete(destinationFileName); | ||||
|         //string arguments = $"-i \"{sourceFile}\" -o \"{result}\""; | ||||
|         string arguments = $"-dSAFER -dBATCH -dNOPAUSE -dFIXEDMEDIA -dFitPage -dAutoRotatePages=/All -dDEVICEWIDTHPOINTS=792 -dDEVICEHEIGHTPOINTS=612 -sOutputFile=\"{destinationFileName}\" -sDEVICE=pdfwrite \"{sourceFileNamePdf}\""; | ||||
|         //Process process = Process.Start(configData.LincPDFCFileName, arguments); | ||||
|         Process? process = Process.Start(ghostPCLFileName, arguments); | ||||
|         _ = process?.WaitForExit(30000); | ||||
|         if (!File.Exists(destinationFileName)) | ||||
| @ -83,11 +101,11 @@ internal static class HelperPdfStripperWrapper | ||||
|             d = Path.Combine(d, directoryName); | ||||
|         if (!string.IsNullOrEmpty(d) && !Directory.Exists(d)) | ||||
|             _ = Directory.CreateDirectory(d); | ||||
|         char? parser = p is null ? null : p == "S" ? 'S' : p == "G" ? 'G' : p == "K" ? 'K' : null; | ||||
|         char? parser = p is null ? null : p == "S" ? _Stripper : p == "G" ? _Ghost : p == "K" ? _Kofax : p == "L" ? _Linc : null; | ||||
|         return new(d, k, parser); | ||||
|     } | ||||
|  | ||||
|     private static void ParseSave(ILogger log, string pdfTextStripperFileName, string ghostPCLFileName, string kofaxFileName, string destinationDirectory, char parser, string[] files) | ||||
|     private static void ParseSave(ILogger log, string pdfTextStripperFileName, string ghostPCLFileName, string kofaxFileName, string lincPDFCFileName, string destinationDirectory, char parser, string[] files) | ||||
|     { | ||||
|         string text; | ||||
|         string destinationFileName; | ||||
| @ -96,12 +114,14 @@ internal static class HelperPdfStripperWrapper | ||||
|         foreach (string file in files) | ||||
|         { | ||||
|             destinationFileName = Path.Combine(destinationDirectory, $"{file}.txt"); | ||||
|             if (parser == 'S') | ||||
|                 text = GetTextFromPDF(pdfTextStripperFileName, file, destinationFileName); | ||||
|             else if (parser == 'G') | ||||
|                 text = GetGhostTextFromPDF(ghostPCLFileName, file, destinationFileName); | ||||
|             else if (parser == 'K') | ||||
|             if (parser == _Kofax) | ||||
|                 text = GetKofaxTextFromPDF(kofaxFileName, file, destinationFileName); | ||||
|             else if (parser == _Linc) | ||||
|                 text = GetLincTextFromPDF(lincPDFCFileName, file, destinationFileName); | ||||
|             else if (parser == _Ghost) | ||||
|                 text = GetGhostTextFromPDF(ghostPCLFileName, file, destinationFileName); | ||||
|             else if (parser == _Stripper) | ||||
|                 text = GetTextFromPDF(pdfTextStripperFileName, file, destinationFileName); | ||||
|             else | ||||
|                 throw new NotImplementedException(); | ||||
|             log.LogInformation("<{file}> == {length}", Path.GetFileName(file), text.Length); | ||||
| @ -135,35 +155,56 @@ internal static class HelperPdfStripperWrapper | ||||
|  | ||||
|     internal static void ParseSave(ILogger log, List<string> args) | ||||
|     { | ||||
|         string pdfTextStripperFileName = Path.Combine(AppContext.BaseDirectory, "PDF-Text-Stripper.exe"); | ||||
|         if (!File.Exists(pdfTextStripperFileName)) | ||||
|             log.LogInformation("exe <{pdfTextStripperFileName}> doesn't exist!", pdfTextStripperFileName); | ||||
|         // <ItemGroup> | ||||
|         //     <PackageReference Include="Infineon.Mesa.PDF.Text.Stripper" Version="4.8.0.1"><NoWarn>NU1701</NoWarn></PackageReference> | ||||
|         // </ItemGroup> | ||||
|         // <ItemGroup> | ||||
|         //     <None Include="\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6dll64.dll"> | ||||
|         //         <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|         //     </None> | ||||
|         //     <None Include="\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\GhostPCL\gpcl6win64\gpcl6win64.exe"> | ||||
|         //         <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|         //     </None> | ||||
|         //     <None Include="\\mestsa003.infineon.com\EC_EAFRepository\Staging\DeploymentStorage\LincPDFC\v2.6.6.21\LincPDFC.exe"> | ||||
|         //         <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|         //     </None> | ||||
|         // </ItemGroup> | ||||
|         string sourceDirectory = Path.GetFullPath(args[0]); | ||||
|         Input input = GetInput(args); | ||||
|         if (string.IsNullOrEmpty(input.DestinationDirectory)) | ||||
|             log.LogInformation("-d <{DestinationDirectory}> wasn't supplied!", nameof(input.DestinationDirectory)); | ||||
|         else | ||||
|         { | ||||
|             string ghostPCLFileName = Path.Combine(AppContext.BaseDirectory, "gPcl6win64.exe"); | ||||
|             if (!File.Exists(ghostPCLFileName)) | ||||
|                 log.LogInformation("exe <{ghostPCLFileName}> doesn't exist!", ghostPCLFileName); | ||||
|             if (input.Parser is null) | ||||
|                 log.LogInformation("-p <{Parser}> wasn't supplied!", nameof(input.Parser)); | ||||
|             else | ||||
|             { | ||||
|                 string kofaxFileName = "C:/Program Files (x86)/Kofax/Power PDF 50/batchConverter.com"; | ||||
|                 if (!File.Exists(kofaxFileName)) | ||||
|                     log.LogInformation("exe <{kofaxFileName}> doesn't exist!", kofaxFileName); | ||||
|                 string pdfTextStripperFileName = Path.Combine(AppContext.BaseDirectory, "PDF-Text-Stripper.exe"); | ||||
|                 if (input.Parser == _Stripper && !File.Exists(pdfTextStripperFileName)) | ||||
|                     log.LogInformation("exe <{pdfTextStripperFileName}> doesn't exist!", pdfTextStripperFileName); | ||||
|                 else | ||||
|                 { | ||||
|                     Input input = GetInput(args); | ||||
|                     if (string.IsNullOrEmpty(input.DestinationDirectory)) | ||||
|                         log.LogInformation("-d <{DestinationDirectory}> wasn't supplied!", nameof(input.DestinationDirectory)); | ||||
|                     string ghostPCLFileName = Path.Combine(AppContext.BaseDirectory, "gPcl6win64.exe"); | ||||
|                     if (input.Parser == _Ghost && !File.Exists(ghostPCLFileName)) | ||||
|                         log.LogInformation("exe <{ghostPCLFileName}> doesn't exist!", ghostPCLFileName); | ||||
|                     else | ||||
|                     { | ||||
|                         if (input.Parser is null) | ||||
|                             log.LogInformation("-p <{Parser}> wasn't supplied!", nameof(input.Parser)); | ||||
|                         string kofaxFileName = "C:/Program Files (x86)/Kofax/Power PDF 50/batchConverter.com"; | ||||
|                         if (input.Parser == _Kofax && !File.Exists(kofaxFileName)) | ||||
|                             log.LogInformation("exe <{kofaxFileName}> doesn't exist!", kofaxFileName); | ||||
|                         else | ||||
|                         { | ||||
|                             string[] files = Directory.GetFiles(args[0], "*.pdf", SearchOption.TopDirectoryOnly); | ||||
|                             if (files.Length == 0) | ||||
|                                 log.LogInformation("Length == {length}", files.Length); | ||||
|                             string lincPDFCFileName = Path.Combine(AppContext.BaseDirectory, "LincPDFC.exe"); | ||||
|                             if (input.Parser == _Kofax && !File.Exists(lincPDFCFileName)) | ||||
|                                 log.LogInformation("exe <{lincPDFCFileName}> doesn't exist!", lincPDFCFileName); | ||||
|                             else | ||||
|                                 ParseSave(log, pdfTextStripperFileName, ghostPCLFileName, kofaxFileName, input.DestinationDirectory, input.Parser.Value, files); | ||||
|                             { | ||||
|                                 string[] files = Directory.GetFiles(sourceDirectory, "*.pdf", SearchOption.TopDirectoryOnly); | ||||
|                                 if (files.Length == 0) | ||||
|                                     log.LogInformation("Length == {length}", files.Length); | ||||
|                                 else | ||||
|                                     ParseSave(log, pdfTextStripperFileName, ghostPCLFileName, kofaxFileName, lincPDFCFileName, input.DestinationDirectory, input.Parser.Value, files); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user