Problema na leitura do Arquivo
Estou com uma certa dificuldade de utilizar outros meios para a leitura de um determinado arquivo. tenho o seguinte método:
private static void ProcessaArquivo(string FullPathFile)
{
try
{
bool Mover = true;
string[] StringLinha = System.IO.File.ReadAllLines(FullPathFile);
string CodBarra = "";
for (int line = 0; line < StringLinha.Length; line++)
{
string DtPagamento = "";
string VlrDocumento = "";
string Protocolo = "";
string Registro = "";
string Emissao = "";
#region Recupera o Código de Barra
if (StringLinha[line].Contains("Cod. Barras:"))
{
CodBarra += StringLinha[line].Replace("Cod. Barras:", "");
line += 2;
}
if (CodBarra != "")
{
CodBarra += StringLinha[line];
CodBarra = CodBarra.Replace(" ", "");
}
#endregion
if (CodBarra == "")
continue;
line += 6;
#region Data de Pagamento
if (StringLinha[line].Contains("Dt.Pagamento:"))
{
DtPagamento += StringLinha[line].Replace("Dt.Pagamento:", "").Replace(" ", " ");
}
#endregion
line += 2;
#region Valor do Documentos
if (StringLinha[line].Contains("Vlr.Documento:"))
{
VlrDocumento += StringLinha[line].Replace("Vlr.Documento:", "").Replace(" ", "");
}
#endregion
line += 2;
#region Protocolo
if (StringLinha[line].Contains("Protocolo:"))
{
Protocolo += StringLinha[line].Replace("Protocolo:", "").Replace(" ", "");
}
#endregion
line += 12;
#region Registro
if (StringLinha[line].Contains("Registro:"))
{
Registro += StringLinha[line].Replace("Registro:", "");
}
#endregion
line += 2;
#region Emissao
if (StringLinha[line].Contains("Emissao.:"))
{
Emissao += StringLinha[line].Replace("Emissao.:", "");
}
#endregion
}
CodBarra = "";
}
if (Mover)
{
MoveFile(FullPathFile);
}
}
catch (Exception)
{
throw;
}
}
Existe uma outra forma de utilizar algo como:
String[] lines = File.ReadAllLines(Filename);
VoucherInfo vi = null;
Boolean InBarCodes = false;
if (line.StartsWith(CodBarras))
{
String codigoBarras = line.Split(new Char[] { ':' })[1].Trim();
vi.CodBarras.Add(codigoBarras);
InBarCodes = true;
continue;
}
if (InBarCodes)
{
vi.codigoBarras.Add(line.Trim());
}
Gostaria de ver uma melhor forma de ler esses dados mencionados acima, sem depender da quantidade de linhas até chegar em cada um, tentei algo relacionado ao código logo acima dessa explicação, mas nada que me ajudou, alguém teria uma ideia, uma sugestão do que eu poderia estar fazendo?
Pensei em algo assim também:
if (!StringLinha[line].Contains("Cod. Barras:") && !StringLinha[line].Contains("Dt.Pagamento:") && !StringLinha[line].Contains("Vlr.Documento:") &&
!StringLinha[line].Contains("Protocolo:") && !StringLinha[line].Contains("Registro:") && !StringLinha[line].Contains("Emissao.:"))
{
continue;
Console.WriteLine(StringLinha[line]);
}
Funciona em parte, porque tenho o código de barras que possui a numeração na linha de cima e o restante da numeração desse código de barras na próxima linha, porém ele só está pegando a primeira numeração, eu teria necessidade de concatenar essa quebras de linhas nesse respectivo código do if, mas sem sucesso.
Estou postando essas informações detalhadas, mas estou a disposição para explicar mais ainda. Eu só preciso ler esses determinados campos, usando a primeira lógica postada ele funciona, porém gostaria de aplicar em cima do que já tenho uma lógica que não fica dependendo em qual posição de linha certos campos estão ou deixa de estar, pois peguei arquivo aqui que não vem na mesma posição.Discussão (3)
Carregando comentários...