PostgresDumpToJson

This commit is contained in:
Mike Phares 2025-03-01 09:20:35 -07:00
parent 30931eda9c
commit 384c83304b
3 changed files with 141 additions and 5 deletions

22
.vscode/launch.json vendored
View File

@ -13,14 +13,26 @@
"args": [ "args": [
"s", "s",
"X", "X",
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\HGCV1\\2025_Week_09\\2025-02-24", "L:/Git/pocketbase_0.25.8_windows_amd64",
"Day-Helper-2025-02-28",
"immich-db-backup-1739350800014.sql",
"COPY_public.",
"FROM_stdin",
"555",
"666",
"777",
"888",
"999",
"s",
"X",
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\BIORAD4\\2025_Week_09\\2025-02-28\\-660626-_2025-02-28_04;49_PM_395577460",
"Day-Helper-2025-02-19", "Day-Helper-2025-02-19",
"csv-*.pdsf", "csv-*.pdsf",
"*.pdsf", "*.pdsf",
"Test,Count,MesEntity,HeaderUniqueId,UniqueId,Id,Recipe,Date,AreaDeltaFromLastRun,GLimit,HGCV1", "Test,Count,MesEntity,HeaderUniqueId,UniqueId,Date,Wafer,Position,BIORAD4",
"Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,HGCV1", ",BIORAD4",
"RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09,HGCV1", ",BIORAD4",
"FlatZMean|MeanFlatZ,GradeMean|MeanGrade,NAvgMean|MeanNAvg,NslMean|MeanNsl,PhaseMean|MeanPhase,RhoAvgMean|MeanRhoAvg,RhoslMean|MeanRhosl,RsMean|MeanRs,VdMean|MeanVd,FlatZRadialGradient|RadialGradientFlatZ,GradeRadialGradient|RadialGradientGrade,NAvgRadialGradient|RadialGradientNAvg,NslRadialGradient|RadialGradientNsl,PhaseRadialGradient|RadialGradientPhase,RhoAvgRadialGradient|RadialGradientRhoAvg,RhoslRadialGradient|RadialGradientRhosl,RsRadialGradient|RadialGradientRs,VdRadialGradient|RadialGradientVd,FlatZStdDev|StandardDeviationPercentageFlatZ,GradeStdDev|StandardDeviationPercentageGrade,NAvgStdDev|StandardDeviationPercentageNAvg,NslStdDev|StandardDeviationPercentageNsl,PhaseStdDev|StandardDeviationPercentagePhase,RhoAvgStdDev|StandardDeviationPercentageRhoAvg,RhoslStdDev|StandardDeviationPercentageRhosl,RsStdDev|StandardDeviationPercentageRs,VdStdDev|StandardDeviationPercentageVd,|HGCV1", "MID|Cassette,Lot|Batch,Title|Batch,Wafer|Text,Thickness|Site,MeanThickness|GradeMean,|BIORAD4",
"888", "888",
"999", "999",
"s", "s",

View File

@ -0,0 +1,122 @@
using Microsoft.Extensions.Logging;
using System.Collections.ObjectModel;
using System.Text.Json;
namespace File_Folder_Helper.ADO2025.PI5;
internal static partial class Helper20250228
{
private record Record(string TableName, ReadOnlyCollection<string> Columns, ReadOnlyCollection<string[]> Rows);
private static ReadOnlyCollection<Record> GetRecords(string headerA, string headerB, string file)
{
List<Record> results = [];
string line;
string[] segmentsA;
string[] segmentsB;
string[] segmentsC;
string[] segmentsD;
string[] segmentsE;
string[] segmentsF;
List<string[]> rows;
string? tableName = null;
string[] lines = File.ReadAllLines(file);
ReadOnlyCollection<string>? columns = null;
for (int i = 0; i < lines.Length; i++)
{
line = lines[i];
if (tableName is null)
{
segmentsA = line.Split(headerA);
if (segmentsA.Length != 2)
continue;
segmentsB = segmentsA[1].Split(headerB);
if (segmentsB.Length != 2)
continue;
segmentsC = segmentsB[0].Split('(');
if (segmentsC.Length != 2)
continue;
segmentsD = segmentsC[1].Split(')');
if (segmentsD.Length != 2)
continue;
columns = segmentsD[0].Split(',').Select(l => l.Trim(' ').Trim('"')).ToArray().AsReadOnly();
if (columns.Count == 0)
continue;
segmentsE = segmentsB[0].Split(' ');
tableName = segmentsE[0];
}
else if (columns is null)
break;
else
{
rows = [];
for (int j = i + 1; j < lines.Length; j++)
{
i = j;
segmentsF = lines[j].Split('\t');
if (segmentsF.Length != columns.Count)
{
if (rows.Count > 0)
results.Add(new(TableName: tableName, Columns: columns, Rows: rows.AsReadOnly()));
break;
}
rows.Add(segmentsF);
}
columns = null;
tableName = null;
}
}
return results.AsReadOnly();
}
private static void WriteFile(string file, ReadOnlyCollection<Record> records)
{
List<string> results = [];
string json;
string text;
Dictionary<string, string?> keyValuePairs = [];
foreach (Record record in records)
{
results.Clear();
foreach (string[] row in record.Rows)
{
keyValuePairs.Clear();
for (int i = 0; i < row.Length; i++)
{
if (row[i] == "\\N")
keyValuePairs.Add(record.Columns[i], null);
else
keyValuePairs.Add(record.Columns[i], row[i]);
}
json = JsonSerializer.Serialize(keyValuePairs);
results.Add(json);
}
text = string.Join($",{Environment.NewLine}", results);
File.WriteAllText($"{file[..^4]}-{record.TableName}.json", $"[{Environment.NewLine}{text}{Environment.NewLine}]");
}
}
private static void PostgresDumpToJson(ILogger<Worker> logger, string headerA, string headerB, string file)
{
ReadOnlyCollection<Record> records = GetRecords(headerA, headerB, file);
if (records.Count > 0)
WriteFile(file, records);
else
logger.LogWarning("<{records}>(s)", records.Count);
}
internal static void PostgresDumpToJson(ILogger<Worker> logger, List<string> args)
{
string searchPattern = args[2];
string headerA = args[3].Replace('_', ' ');
string headerB = args[4].Replace('_', ' ');
string sourceDirectory = Path.GetFullPath(args[0]);
string[] files = Directory.GetFiles(sourceDirectory, searchPattern, SearchOption.AllDirectories);
if (files.Length != 1)
logger.LogWarning("<{files}>(s)", files.Length);
else
PostgresDumpToJson(logger, headerA, headerB, files[0]);
}
}

View File

@ -137,6 +137,8 @@ internal static class HelperDay
ADO2025.PI5.Helper20250218.MoveToArchive(logger, args); ADO2025.PI5.Helper20250218.MoveToArchive(logger, args);
else if (args[1] == "Day-Helper-2025-02-19") else if (args[1] == "Day-Helper-2025-02-19")
ADO2025.PI5.Helper20250219.Compare(logger, args); ADO2025.PI5.Helper20250219.Compare(logger, args);
else if (args[1] == "Day-Helper-2025-02-28")
ADO2025.PI5.Helper20250228.PostgresDumpToJson(logger, args);
else else
throw new Exception(appSettings.Company); throw new Exception(appSettings.Company);
} }