Jump to content
rtavix

Problema na leitura do Arquivo

Recommended Posts

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.

Share this post


Link to post
Share on other sites

Tenta explicar melhor!

Como é a estrutura do arquivo?
O que você deseja ler? todas as linhas? Achar uma linha específica?

Share this post


Link to post
Share on other sites

qual erro esta gerando ?

Share this post


Link to post
Share on other sites
Em 09/10/2018 at 15:11, xanburzum disse:

qual erro esta gerando ?

Consegui resolver, estava passando o valor como nulo, por isso não funcionava.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By lulicanunes
      - Escreva o programa em linguagem C - É permitido o uso do CodeBlocks - Envie o arquivo, no local apropriado Descrição. Faça um programa em C que calcule o imposto de renda para um conjunto de 5 pessoas (contribuintes). Os dados de cada pessoa devem ser manipulados através de uma estrutura que contém os campos para o nome (string), sobrenome (string), salário mensal (float), deduções (float) e saldo (float). A leitura será feita através de um arquivo texto contendo informações referentes aos três primeiros campos da estrutura. Ao final, o saldo de cada contribuinte deve ser exibido na tela junto com seu nome e sobrenome. OBS.: As instruções a seguir implementam a lógica para resolver esse problema.
      Instruções. 1.
      (1,0) Defina a estrutura para armazenar os dados dos contribuintes.
      2. (1,0) Declare um vetor de estruturas com 5 posições.
      3. (3,0) Faça a leitura dos dados do arquivo de entrada, armazenando-os nas respectivas posições do vetor criado.
      OBS.: Assuma que o arquivo de entrada tem o nome "imposto.txt" e que cada registro (ou linha) desse arquivo tem o formato "%s\t%s\t%f\t%f\n" (i.e., os dados estão separados pelo caractere TAB - "\t").
      Exemplos de possíveis registros do arquivo de entrada:
      Pedro      Silva      2200.00      980.00
      Paulo      Santos    5400.00     2230.00
       
      (3,0) Após concluir a leitura dos dados, crie uma função que será chamada somente uma vez e que receba o vetor de structs e, a partir das informações de salário e deduções, calcule o saldo (imposto devido ou restituição) a ser pago para cada pessoa de acordo com a seguinte fórmula Saldo = Deduções - (12 * Salário mensal * Alíquota)
      O valor da alíquota depende do salário mensal de cada pessoa, com a seguinte divisão:
       
      Salário Mensal                                           Alíquota
      Abaixo de R$ 2.826                                      0.075                            
      De R$ 2.826 até R$ 4.664                            0.225
      Acima de R$ 4.664                                        0.275
       
      (2,0) Imprima na tela um relatório contendo o nome, o sobrenome e o saldo de todos os contribuintes. Exemplo de execução. Resultado considerando o arquivo de entrada fornecido. Nome: João
      Sobrenome: Silva
      Saldo: 9820.00
       
      Nome: Osvaldo
      Sobrenome: Aranha
      Saldo: 6480.00
       
      Nome: Pedro
      Sobrenome: Alves
      Saldo: 4542.00
    • By Joseph Amupolo
      Eu estou começando aprender a linguagem C, alguem  pode me ajudar com esse excercício?
      Desenvolver um sistema para catálogo de produtos em um supermercado
       
      Os itens devem conter:
      • Código do produto
      • Descrição
      • Quantidade em estoque
      • Valor (Em Reais)
       
      O sistema deve oferecer um menu ao usuário, permitindo as seguintes operações:
      1. Cadastrar produto
      2. Remover produto
      3. Consultar produto
      4. Resumo do estoque
      5. Sair
    • By rl28
      Bom dia,
       
      Estou querendo ler todos arquivos que meu sistema gerou na minha máquina no formato .txt e carregar os mesmos em uma gridview, assim deixando apenas uma tela de consulta dos dados salvos nos arquivos txt, porém, meu código não está conseguindo consultar os arquivos, podem me ajudar?
       
      Obs.: Quando utilizo o nome fixo do arquivo, funciona.
       
      Código abaixo:

       
      Public Class formListaTransacao Private Sub formListaTransacao_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim dt As New DataTable dt.Columns.Add("Código") dt.Columns.Add("Descrição") dt.Columns.Add("Ação") Dim Arquivo As New System.IO.StreamReader("C:\Users\rl\Desktop\" & Me.Text & ".txt", System.Text.Encoding.Default) While Arquivo.Peek() <> -1 dt.Rows.Add(Arquivo.ReadLine()) End While DataGridView2.DataSource = dt End Sub  
      Tela do gridview:

       
      Informação que consta no txt e que deve carregar no gridview:
       
      Primeiro arquivo

       
      Segundo arquivo:

    • By luiz-om
      Estou começando a aprender c#, e estou com a seguinte duvida. Tenho as tabelas lote, leitura e consumo. A tabela leitura herda de lote o ID. um lote tem muitas leituras. E uma leitura tem um consumo.
      A real duvida e a seguinte: quando faço a inserção de uma leitura o consumo já é salvo automático, porém quero buscar a última leitura inserida com aquele ID fazer a subtração do número dela pra poder gerar o valor certo na tabela consumo. e não estou conseguindo fazer isso.
      [Table("Lote")] public class Lote { [Key] public int Id { get; set; } [Required] [MinLength(2, ErrorMessage ="O nome deve ter no minimo 2 caracters")] [MaxLength(140, ErrorMessage ="O nome pode ter no maximo 140 caracteres")] public string Proprietario { get; set; } public string CPF { get; set; } //Gera um checkbox public Boolean Socio { get; set; } public string Cavalete { get; set; } public virtual ICollection<Leitura> Leituras { get; set; } } [Table("Leitura")] public class Leitura { [Key] public int Id { get; set; } [ForeignKey("Lote")] public int LoteId { get; set; } public DateTime DataLeitura { get; set; } public int NumeroLeitura { get; set; } public virtual Lote Lote { get; set; } public virtual Consumo Consumo { get; set; } } public class Consumo { [Key, ForeignKey("Leitura")] public int Id { get; set; } public Double Valor { get; set; } public DateTime? DataPagamento { get; set; } public virtual Leitura Leitura { get; set; } } A parte de create da controller é essa
      [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create([Bind(Include = "Id,LoteId,DataLeitura,NumeroLeitura")] Leitura leitura) { if (ModelState.IsValid) { //aki tudo que ja tentei /* * var leitura2 = from l in db.Leitura select l; leitura2 = leitura2.OrderByDescending(l => l.Id); db.Leitura.Where(l => l.LoteId == leitura.LoteId).OrderByDescending(l=> l.NumeroLeitura); // db.Leitura.leitura2.NumeroLeitura = db.Leitura.Where(l => l.LoteId == leitura.LoteId).FirstAsync; // db2.Leitura.Find(leitura2.LoteId).; var sql = db.Leitura.SqlQuery("select ID from Leitura Order by ID DESC;"); */ var consumo = new Consumo(); consumo.Leitura = leitura; //Essa parte que faz a conta apra salvar o consumo consumo.Valor =( leitura.NumeroLeitura) * 0.71; //quero fazer +- isso //consumo.Valor = (leitura.NumeroLeitura< <- ESSE SERIA O VALOR DA LEITURA ANTERIOR> - leitura.NumeroLeitura) * 0.71; db.Leitura.Add(leitura); db.Consumo.Add(consumo); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.LoteId = new SelectList(db.Lote, "Id", "CPF", leitura.LoteId); return View(leitura); }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.