/// <summary> /// Compara as duas listas /// </summary> /// <param name="pCaminho1"></param> /// <param name="pCaminho2"></param> /// <param name="resultado"></param> /// <returns></returns> public bool CompararListas(string pCaminho1, string pCaminho2, out ObjetoResultadoComparacao resultado) { ObjetoCabecalho cabecalho = new ObjetoCabecalho(pCaminho1, pCaminho2); Dictionary <string, List <ObjetoComparacaoLista> > listaMateriais1 = CriaObjetosComparacaoLista(pCaminho1); Dictionary <string, List <ObjetoComparacaoLista> > listaMateriais2 = CriaObjetosComparacaoLista(pCaminho2); List <DivergenciaEntreEstruturaLista> divergenciasMesmaLista = new List <DivergenciaEntreEstruturaLista>(); divergenciasMesmaLista.AddRange(ComparaEstruturasUmaLista(listaMateriais1, "Lista Original")); divergenciasMesmaLista.AddRange(ComparaEstruturasUmaLista(listaMateriais2, "Lista Nova")); List <string> estruturasComuns = EstruturasComuns(listaMateriais1, listaMateriais2, out List <string> soNa1, out List <string> soNa2); resultado = new ObjetoResultadoComparacao(cabecalho, soNa1, soNa2, divergenciasMesmaLista); foreach (string estrutura in estruturasComuns) { var objeto1 = listaMateriais1.FirstOrDefault(x => FuncoesUteis.ComparaNomeEstruturas(x.Key, estrutura)); var objeto2 = listaMateriais2.FirstOrDefault(x => FuncoesUteis.ComparaNomeEstruturas(x.Key, estrutura)); resultado.ListaEstruturasComparadas.Add(ComparaEstruturas(objeto1.Value, objeto2.Value, estrutura)); } return(true); }
public static void EscreveExcel(string pNomeArquivo, ObjetoResultadoComparacao pResultadoComparacao) { //object[][] saida = new object[3][] { new string[2] { "A", "B" }, new string[2] { "C", "D" }, new string[2] { "E", "F" } }; string nomeComExt = pNomeArquivo; Stream k = GetResourceFileStream("Template"); using (var fileStream = File.Create(nomeComExt)) { k.Seek(0, SeekOrigin.Begin); k.CopyTo(fileStream); } WorkBook wb = WorkBook.ReadExcelFile(nomeComExt); WorkSheet abaNcs = wb.GetWorksheetByName("PMV-NCs"); WorkSheet abaMelhorias = wb.GetWorksheetByName("PMV-Melhorias"); //dados = lista de listas onde cada lista é uma linha var dados = abaNcs.Data; //aba.WriteData(0, 0, saida); EscreveDivergenciasExcel(abaNcs, pResultadoComparacao, _primeiraLinhaNCExcel, true); EscreveDivergenciasExcel(abaMelhorias, pResultadoComparacao, _primeiraLinhaMelhoriaExcel, false); wb.Save(); }
public static void EscreveTxt(string pNomeArquivo, ObjetoResultadoComparacao pResultadoComparacao) { string nome = pNomeArquivo + ".txt"; StringBuilder strBuilder = new StringBuilder(); strBuilder.AppendLine(pResultadoComparacao.ObjetoCabecalho.EscreveCabecalho()); foreach (EstruturaComparacao estrutura in pResultadoComparacao.ListaEstruturasComparadas) { strBuilder.AppendLine(estrutura.NomeEstruturaSaida); strBuilder.AppendLine(); if (estrutura.PosicoesSomenteListaOriginal.Count > 0) { strBuilder.AppendLine(string.Format(" Posições não encontradas na lista original: {0}", string.Join(", ", estrutura.PosicoesSomenteListaOriginal.Distinct()))); strBuilder.AppendLine(); } if (estrutura.PosicoesSomenteListaNova.Count > 0) { strBuilder.AppendLine(string.Format(" Posições não encontradas na lista nova: {0}", string.Join(", ", estrutura.PosicoesSomenteListaNova.Distinct()))); strBuilder.AppendLine(); } StringBuilder divergencias = new StringBuilder(); StringBuilder melhorias = new StringBuilder(); bool temDivergencia = false; bool temMelhoria = false; foreach (PosicaoComparacao posicao in estrutura.ListaPosicoesComErros) { if (posicao.EscreveAlteracoes(true, out string alteracoes)) { divergencias.AppendLine(alteracoes); temDivergencia = true; } } foreach (PosicaoComparacao posicao in estrutura.ListaPosicoesComErros) { if (posicao.EscreveAlteracoes(false, out string alteracoes)) { melhorias.AppendLine(alteracoes); temMelhoria = true; } } if (temDivergencia) { strBuilder.AppendLine(" Divergências:"); strBuilder.AppendLine(); strBuilder.Append(divergencias.ToString()); } if (temMelhoria) { strBuilder.AppendLine(" Melhorias:"); strBuilder.AppendLine(); strBuilder.AppendLine(melhorias.ToString()); } if (!temMelhoria && !temDivergencia) { strBuilder.AppendLine(" Todas as posições na estrutura estão iguais entre as listas"); } } if (pResultadoComparacao.ListaDivergenciasMesmaLista.Count > 0) { strBuilder.AppendLine(); strBuilder.AppendLine("Posições que estão com informações divergente entre estruturas de uma mesma lista:"); foreach (DivergenciaEntreEstruturaLista divergencia in pResultadoComparacao.ListaDivergenciasMesmaLista) { strBuilder.AppendLine(string.Format(" • {0} na {1} : {2}", divergencia.Posicao, divergencia.ListaErrada, string.Join(", ", divergencia.EstruturasQueContem))); } } if (pResultadoComparacao.EstruturasSomenteListaOriginal.Count > 0) { strBuilder.AppendLine("Estruturas que estão na Lista Original e não foram encontradas na Lista Nova:"); foreach (string estrutura in pResultadoComparacao.EstruturasSomenteListaOriginal) { strBuilder.AppendLine(string.Format(" • {0}", estrutura)); } } if (pResultadoComparacao.EstruturasSomenteListaNova.Count > 0) { strBuilder.AppendLine("Estruturas que estão na Lista Nova e não foram encontradas na Lista Original:"); foreach (string estrutura in pResultadoComparacao.EstruturasSomenteListaNova) { strBuilder.AppendLine(string.Format(" • {0}", estrutura)); } } using (StreamWriter outputFile = new StreamWriter(nome, false)) { outputFile.Write(strBuilder.ToString()); } }
/// <summary> /// Escreve os resultados contidos no ObjetoResultadoComparacao no arquivo Excel /// </summary> /// <param name="pAbaNcs"></param> /// <param name="pResultado"></param> /// <param name="pIndexPrimeiraLinha"></param> /// <param name="pNCOuMelhoria"></param> public static void EscreveDivergenciasExcel(WorkSheet pAbaNcs, ObjetoResultadoComparacao pResultado, int pIndexPrimeiraLinha, bool pNCOuMelhoria) { List <string[]> listaTextosLinhas = new List <string[]>(); foreach (EstruturaComparacao estrutura in pResultado.ListaEstruturasComparadas) { //string codigoEstrutura = estrutura.NomeEstruturaSaida.Split('-').First(); string codigoEstrutura = estrutura.NomeEstruturaSaida; foreach (PosicaoComparacao posicao in estrutura.ListaPosicoesComErros) { List <ErroPosicao> errosConsiderar = posicao.ListaErrosPosicao.Where(x => x.NcOuMelhoria == pNCOuMelhoria).ToList(); if (errosConsiderar.Count > 0) { List <string> linha = new List <string>(); linha.Add(posicao.NumeracaoString); string descricaoErro = string.Join("; ", errosConsiderar.Select(x => x.EscreveErroExcel())); linha.Add(descricaoErro); linha.Add(""); linha.Add(codigoEstrutura); listaTextosLinhas.Add(linha.ToArray()); } } if (pNCOuMelhoria) { foreach (string posicao in estrutura.PosicoesSomenteListaOriginal.Distinct()) { List <string> linha = new List <string>(); linha.Add(posicao); string descricaoErro = string.Format("Posição {0} eliminada", posicao); linha.Add(descricaoErro); linha.Add(""); linha.Add(codigoEstrutura); listaTextosLinhas.Add(linha.ToArray()); } foreach (string posicao in estrutura.PosicoesSomenteListaNova.Distinct()) { List <string> linha = new List <string>(); linha.Add(posicao); string descricaoErro = string.Format("Criada posição {0}", posicao); linha.Add(descricaoErro); linha.Add(""); linha.Add(codigoEstrutura); listaTextosLinhas.Add(linha.ToArray()); } } } if (pNCOuMelhoria) { foreach (DivergenciaEntreEstruturaLista divergenciaMesmaLista in pResultado.ListaDivergenciasMesmaLista) { List <string> linha = new List <string>(); linha.Add(divergenciaMesmaLista.Posicao); string descricaoErro = string.Format(divergenciaMesmaLista.EscreveErroExcel()); linha.Add(descricaoErro); listaTextosLinhas.Add(linha.ToArray()); } int erro = 1; foreach (string estrutura in pResultado.EstruturasSomenteListaOriginal) { List <string> linha = new List <string>(); linha.Add(string.Format("ENE-{0}", erro)); erro++; string descricaoErro = string.Format("Estrutura {0} não encontrada na lista nova", estrutura); linha.Add(descricaoErro); listaTextosLinhas.Add(linha.ToArray()); } foreach (string estrutura in pResultado.EstruturasSomenteListaNova) { List <string> linha = new List <string>(); linha.Add(string.Format("ENE-{0}", erro)); erro++; string descricaoErro = string.Format("Estrutura {0} não encontrada na lista original", estrutura); linha.Add(descricaoErro); listaTextosLinhas.Add(linha.ToArray()); } pAbaNcs.WriteData(pIndexPrimeiraLinha, 2, listaTextosLinhas.ToArray()); } else { pAbaNcs.WriteData(pIndexPrimeiraLinha, 0, listaTextosLinhas.ToArray()); } }