Ir para conteúdo
rtavix

Ler arquivo e inserir no banco

Recommended Posts

Preciso ler um arquivo e salvar o campo de Data de agendamento, valor do Documento, protocolo, código de barras, Registro: gravar data e hora, como poderia está fazendo? Segue meu código em anexo. O arquivo pode ser aberto no txt, porém não consigo anexar. Dentro desse arquivo eu possuo diversos comprovantes, deixei somente dois como base na explicação. Preciso de ajuda por gentileza. 

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ServicoProcessamentoComprovantes
{
    public class ProcessaRetorno
    {
        private static object objReader;

        private static void Main(string[]args)
        {
            List<string> valoresEncontrados = new List<string>();

            try
            {
                string[] Arquivo = System.IO.Directory.GetFiles(@"\\S3A601\ftp@sefarix\forem\Saida_SDPJ\teste", "*.cpv");

                foreach(var item in Arquivo)
                {
                    string[] linha = item.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    if(linha.Length >=3)
                    {
                        valoresEncontrados.Add(linha[2]);
                    }
                }
            }
            catch(Exception ex)
            {

            }
        }
    }
}

Dados do arquivo:

 

------------------------------------------------

CONTAK TECNOLOGIA SA

--------------CONTAK CORPORATIVO--------------

    Pagamentos e Transferencias Eletronicas

 

PAGAMENTO: DEPOSITO JUDICIAL               

------------------------------------------------

Cliente:        José Frederico Costa e Silva               

                Enc Ger APLIX - Cta C          

Conta:          5.535.0125

Agencia:        104-Central                       

 

Cod. Barras:    898800000078  000002130424

                017092700009  270400028680

Conveniada:     DEPOSITO JUDICIAL               

 

Dt.Agendamento: 29/09/2017

Vlr.Documento:  R$500,00

Protocolo:      94651134

 

Origem:         CONTAK CORPORATIVO

================================================

             TRANSACAO EFETIVADA 

================================================

Registro: 29/09/2017 11:21:29  /local/home/tef/d/20170929/sfcg012.

Emissao.: 30/09/2017 09:54:19 

------------------------------------------------

CONTAK TECNOLOGIA SA

--------------CONTAK CORPORATIVO--------------

    Pagamentos e Transferencias Eletronicas

 

PAGAMENTO: DEPOSITO JUDICIAL               

------------------------------------------------

Cliente:        José Frederico Costa e Silva                

                Enc Ger APLIX- Cta C          

Conta:          5.535.018

Agencia:        104-Central                       

 

Cod. Barras:    898300000032  500002140426

                017092700009  577000029380

Conveniada:     DEPOSITO JUDICIAL               

 

Dt.Agendamento: 29/09/2017

Vlr.Documento:  R$350,00

Protocolo:      94651136

 

Origem:         CONTAK CORPORATIVO

================================================

             TRANSACAO EFETIVADA 

================================================

Registro: 29/09/2017 11:21:29  /local/home/tef/d/20170929/sfcg012.

Emissao.: 30/09/2017 09:54:19 

Editado por rtavix
Alterar informação

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o arquivo for normalizado, com campos bem definidos você pode mapear isso tudo numa classe. O negócio é que você precisa identificar as linhas e assim setar as propriedades.

 

Digamos que você possui uma classe Comprovante:

class Comprovante
{
	public DateTime DataAgendamento{get;set;}
  	public Decimal ValorDocumento{get;set;}
  	public String Protocolo{get;set;}
  	public String CodigoBarras{get;set;}
  	public DateTime DataRegistro{get;set;}
}

Seria necessário ler o arquivo linha a linha e ir identificando e criando os objetos da classe Comprovante. Para isso também seria necessário alguma forma de identificar o fim de um comprovante, se houver mais de um por arquivo.

 

using(FileStream fs = new FileStream("arquivo.cpv", FileMode.Open)) 
{
 using(StreamReader sr = new StreamReader(fs)) 
 {
  var linha = "";
  var fimDoComprovante = "@FIM@"; // alguma forma de identificar o fim do comprovante
  var comprovanteLista = new List < Comprovante > ();
  var comprovante = new Comprovante();
  while ((linha = sr.ReadLine()) != null) 
  {
   if (linha.StartsWith("Cod. Barras")) 
   {
    comprovante.CodigoBarras = linha.Split(':')[1];
   }

   if (linha.Contains("@FIM@")) 
   {
    comprovanteLista.Add(comprovante);
    comprovante = new Comprovante();
   }
  }
 }
}

Use apenas como uma ideia de como fazer, não faça tão sujo assim! :p

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 horas atrás, Kelvin Dules disse:

Se o arquivo for normalizado, com campos bem definidos você pode mapear isso tudo numa classe. O negócio é que você precisa identificar as linhas e assim setar as propriedades.

 

Digamos que você possui uma classe Comprovante:


class Comprovante
{
	public DateTime DataAgendamento{get;set;}
  	public Decimal ValorDocumento{get;set;}
  	public String Protocolo{get;set;}
  	public String CodigoBarras{get;set;}
  	public DateTime DataRegistro{get;set;}
}

Seria necessário ler o arquivo linha a linha e ir identificando e criando os objetos da classe Comprovante. Para isso também seria necessário alguma forma de identificar o fim de um comprovante, se houver mais de um por arquivo.

 


using(FileStream fs = new FileStream("arquivo.cpv", FileMode.Open)) 
{
 using(StreamReader sr = new StreamReader(fs)) 
 {
  var linha = "";
  var fimDoComprovante = "@FIM@"; // alguma forma de identificar o fim do comprovante
  var comprovanteLista = new List < Comprovante > ();
  var comprovante = new Comprovante();
  while ((linha = sr.ReadLine()) != null) 
  {
   if (linha.StartsWith("Cod. Barras")) 
   {
    comprovante.CodigoBarras = linha.Split(':')[1];
   }

   if (linha.Contains("@FIM@")) 
   {
    comprovanteLista.Add(comprovante);
    comprovante = new Comprovante();
   }
  }
 }
}

Use apenas como uma ideia de como fazer, não faça tão sujo assim! :p

Opa Kelvin, bom dia, tentarei aplicar essas funcionalidades implementadas por você ao meu código e darei um retorno em breve, tentei anexar o arquivo, porém não é permitido anexo de arquivo de texto, somente de imagem rsrs, daí postei o arquivo no escopo mesmo da descrição. VocÊ poderia me ajudar em uma outra situação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por laumello12
      Galera ajudinha
      Como faço para consumir um web service pronto em um projeto. Preciso só que ele busque no web service e traga na web 
      HELP
    • Por ValérinhaSilva255
      Precisamos criar um teatro, onde utilizaremos os conceitos de uma matriz em C#. Esta matriz, deverá ter, no máximo, 150 lugares.

      O programa deverá reservar uma poltrona, cobrando para isso do usuário 40% do valor total do ingresso, que deverá ser informado na tela inicial do programa.

      Quando ocupada uma poltrona, o usuário poderá pagar 60% ou 100% do valor total (caso esteja ou não reservada anteriormente). No caso de desmarcação de reserva, deverá ser devolvido 50% do valor da reserva (portanto, 20% do valor total do ingresso).

      O programa poderá ocupar, reservar, liberar poltronas.
      Um espetáculo somente poderá acontecer se a arrecadação total for maior ou igual a 51% do valor total do teatro. 

      Quando o teatro for fechado, pede-se para que se informe:
      Total de Lugares reservados: XX
      Valor total das reservas: R$00,00
      Total de Lugares Ocupados: YY
      Valor total de Ocupantes: R$00,00
      Total de Lugares Livres: ZZ

      Mínimo para realização do Evento: R$999,99. Valor Total Arrecadado: R$989,00
      Se o valor arrecadado for MAIOR que 51% do mínimo para realização, deverá ACONTECER o espetáculo, caso contrário, mostrar quantos locais ainda precisariam ser ocupados, da seguinte forma: Precisaríamos de 10 lugares Ocupados ou 30 lugares reservados para que o espetáculo pudesse ocorrer.

      O visitante deverá ter o “mapa” de cadeiras a sua disposição.

      O visitante irá escolher sua posição informando fileira e cadeira desejada.
      EXEMPLO DE EXECUÇÃO
      PREÇO DO INGRESSO: R$100,00

      ***** ***** ****** Mapa do Teatro ***** ***** *****

      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

      ***** ***** ****** Mapa do Teatro ***** ***** *****

      O que você deseja fazer?
      [0] - Finalizar o programa
      [1] - Abrir Espetáculo
      [2] - Reservar uma poltrona
      [3] - Liberar poltrona reservada
      [4] - Vender poltrona
      [7] - Finalizar vendas
      [9] - Parciais do Espetáculo

      Resumo das Operações:
      0 - Finaliza o programa e retorna para o sistema operacional.
      1 - Libera a sala do teatro, para que o programa possa ser executado outras vezes, para outros espetáculos (Zera todas as variáveis).
      2 - Reservar poltrona (Cobrar 40% do valor do ingresso)
      3 - Liberar poltrona reservada (Devolve 20% do valor do ingresso)
      4 - Vender poltrona (Recebe valor integral do ingresso - 100%)
      7 - Finalizar vendas (listar todos os resultados)
      9 - Parciais (saber quanto esta pago em cada situação. Reservas, vendas, etc.) Pode ser solicitado a qualquer momento.
    • Por Fiori
      Eu, estou cursando SI, e estou no primeiro semestre, o professor passou uma lista de exercícios, consegue resolver todos mas quando cheguei nesse não consigo resolver.
      O exercício é esse:  "Entrar via teclado com o sexo de determinado usuário, aceitar somente “F” ou “M” como respostas válidas.".
      Independente se a resposta for "F", "f", "M", "m" ou qualquer outra o loop do Do se repete. Oque preciso fazer para acontecer o if?
      string genero; Console.Clear(); Console.WriteLine("Caso seja mulher, digite [F]."); Console.WriteLine("Caso seja homem, digite [M]."); genero = Console.ReadLine(); do { Console.WriteLine("Valor invalido."); Console.WriteLine("Digite [F] ou [M]."); genero = Console.ReadLine(); } while (genero != "F" || genero != "M"); if (genero == "F" || genero == "M") { Console.WriteLine("Esse valor foi aceito."); Console.ReadKey(); }
       
    • Por Jonathacsantos
      Boa tarde, sou novo na programação, comecei por conta própria e agora estou com um pequeno problema, meu programa depende de uma pasta criada pra executar um .exe que fica dentro de uma outra pasta, sendo que eu preciso que ele leia o .exe independente de onde ele fica instalado, vou mostrar uma parte do código para tentar explicar 
      private void AcessRemo_Click(object sender, EventArgs e) { foreach ( var process in Process.GetProcessesByName("TeamViewer")) { process.Kill(); } Process.Start("C:\\Teste\\suporteremoto.exe"); ele fecha um teamviewer em execução e executa uma versão especifica do teamviewer, sendo que nos meus testes funciona pq eu tenho essa pasta ai chamada teste, mas o programa instala em Program Files, sendo que se for 64, ele vai pra Program Files (x86), dai gostaria de fazer ele ler, tipo um [LocalPath] , mas não sei como , se alguem puder me ajudar ou me da uma luz eu agradeço muito.
    • Por lucasrodrigues
      Estou com esse problema ao tentar vincular uma tabela do MySql a um DataSet. Utilizo o MySqlConnector 8.0.13, MySql-For-VisualStudio 1.2.8.

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.