file-folder-helper/Helpers/HelperFindReplace.cs
Mike Phares 5fe51ef645 nuget bump
2023-11-02
2023-11-08
net8.0
editorconfig
NuGet NuSpec
Kanban
2023-11-14 07:54:34 -07:00

95 lines
3.0 KiB
C#

using Microsoft.Extensions.Logging;
using System.Collections.ObjectModel;
namespace File_Folder_Helper.Helpers;
internal static class HelperFindReplace
{
private static string? GetTnsNamesOraFile(List<string> args)
{
string? result = null;
for (int i = 1; i < args.Count; i++)
{
if (args[i].Length == 2 && i + 1 < args.Count)
{
if (args[i][1] == 't')
result = Path.GetFullPath(args[i + 1]);
i++;
}
}
return result;
}
private static ReadOnlyCollection<(string, string)> GetFindReplace(string tnsNamesOraFile)
{
List<(string, string)> results = [];
string[] segments;
string[] lines = File.ReadAllLines(tnsNamesOraFile);
foreach (string line in lines)
{
segments = line.Split('=');
if (segments.Length < 3)
continue;
results.Add((segments[0].Trim(), line));
}
return new(results);
}
private static void FindReplace(ILogger log, string[] files, ReadOnlyCollection<(string, string)> findReplace)
{
bool check;
string[] lines;
string[] segments;
foreach (string file in files)
{
check = false;
lines = File.ReadAllLines(file);
for (int i = 0; i < lines.Length; i++)
{
segments = lines[i].Split('=');
if (segments.Length < 3)
continue;
foreach ((string find, string replace) in findReplace)
{
if (!segments[0].Contains(find))
continue;
if (lines[i] == replace)
continue;
if (!check)
check = true;
lines[i] = replace;
}
}
if (check)
{
log.LogInformation("{file}", file);
File.WriteAllLines(file, lines);
}
}
}
internal static void UpdateTnsNames(ILogger log, List<string> args)
{
string? tnsNamesOraFile = GetTnsNamesOraFile(args);
ReadOnlyCollection<(string, string)> findReplace;
if (!string.IsNullOrEmpty(tnsNamesOraFile) && File.Exists(tnsNamesOraFile))
findReplace = GetFindReplace(tnsNamesOraFile);
else
{
log.LogInformation("<{tnsNamesOraFile}> doesn't exist!", tnsNamesOraFile);
findReplace = new(Array.Empty<(string, string)>());
}
if (findReplace.Count == 0)
log.LogInformation("Count == {count}", findReplace.Count);
else
{
string[] files = Directory.GetFiles(args[0], "tnsNames.ora", SearchOption.AllDirectories);
if (files.Length == 0)
log.LogInformation("Length == {length}", files.Length);
else
FindReplace(log, files, findReplace);
}
}
}