private static string[] GetMasterFields <T>(MasterFixedWidthFileSource <T> master, string data) { string outLine = SortFileHelpers.UnEscapeByDelimiter(data.Decompress(), Constants.Delimiters.Tab); string[] results = null; FileParser.ParseFixedWidthString(new StringReader(outLine), (fields, lNum) => { results = fields; }, master.FixedWidths); return(results); }
public static MergePurgeResults MergePurge <T>(MasterDelimitedFileSource <T> master, FixedWidthFileSource <T> detail, Action <MergePurgeParam> processData, string destinationFolder = null, DataMode processMode = DataMode.Passive) { ArgumentValidation <T>(master, detail, processData, destinationFolder); MergePurgeResults mgPurgeResults = new MergePurgeResults(); SortVars mstSortVars = new SortVars(master.SourceFilePath, destinationFolder); SortResults srtResults = SortDelimited <T>(master, mstSortVars.DestFolder); mgPurgeResults.InitFilePaths(master.SourceFilePath, detail.SourceFilePath, mstSortVars.DestFolder); try { string hdr = string.Empty; using (StreamReader reader = new StreamReader(detail.SourceFilePath)) using (StreamWriter addSw = new StreamWriter(mgPurgeResults.AddsFilePath)) using (StreamWriter delSw = new StreamWriter(mgPurgeResults.DeletesFilePath)) using (StreamWriter updSw = new StreamWriter(mgPurgeResults.UpdatesFilePath)) using (StreamWriter ignSw = new StreamWriter(mgPurgeResults.IgnoredFilePath)) { StreamWriter[] actionWriters = { addSw, delSw, updSw, ignSw }; string line; hdr = GetHeader(detail.HasHeader, reader); WriteHeaderToActionWriters(processMode, detail.HasHeader, hdr, actionWriters); while ((line = reader.ReadLine()) != null) { MergePurgeParam mgPurgeParam = new MergePurgeParam(); FileParser.ParseFixedWidthString(new StringReader(line), (fields, lNum) => { mgPurgeParam.DetailFields = fields; mgPurgeParam.DataAction = MergePurgeAction.Ignore; }, detail.FixedWidths); FixedWidthSortMurgePurge <T>(srtResults.DbConnPath, line, master, detail, mgPurgeParam, processData, mgPurgeResults, processMode, actionWriters); } } mgPurgeResults.ClearSubFilesIfNoCount(); if (processMode == DataMode.Active) { mgPurgeResults.RemoveSubFilesAndFilePaths(); } srtResults.SortedFilePath = mgPurgeResults.NewMasterFilePath; srtResults.WriteOutSorted(dbConnPath: srtResults.DbConnPath, header: srtResults.Header, sortDir: master.SortDirection, delimiter: master.Delimiter, deleteDb: true); } catch (Exception) { ExceptionCleanUp(srtResults.DbConnPath, mgPurgeResults); throw; } return(mgPurgeResults); }