PostgresDumpToJson
This commit is contained in:
parent
30931eda9c
commit
384c83304b
22
.vscode/launch.json
vendored
22
.vscode/launch.json
vendored
@ -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",
|
||||||
|
122
ADO2025/PI5/Helper-2025-02-28.cs
Normal file
122
ADO2025/PI5/Helper-2025-02-28.cs
Normal 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]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user