none
Como encontrar determinada palavra em .txt e ignorá-la em C#? RRS feed

  • Pergunta

  • Boa tarde,

    Sou novato na linguagem C# e estou tendo dificuldades em fazer uma aplicação, são duas dúvidas.

    1º Preciso fazer com que abra um arquivo .txt de acordo com 2 combobox e um DateTimePicker, basicamente ele tem que formar  "_AC_26jan16.txt" onde "AC" significa local/região ,"26jan16" deve ser armazenado em data e ".txt" é a extensão do arquivo para que possa ser buscado no banco de dados postgre de acordo com data, sigla do local e extensão do arquivo. 

    2º Abrir o arquivo .txt, percorrer linha a linha de um arquivo em formato de largura fixa enviando pro banco de dados. Consegui remover os espaços em brancos e inserir ";" entre eles mas não consegui enviar pro bd. Algumas linhas não devem ser enviadas, e tem ".Arquivo Verificado", quero que quando for percorrer essa linha, ele ignore-a e passe pra outra.

    Exemplo do arquivo: 

    16:42:51 ACMB702RPPA               AÇMBLI7-02  Recepção Permissivo             Alarme                                        [7]       
    16:42:52 ACMB702RPPA               AÇMBLI7-02  Recepção Permissivo             Normal                                        [8 ADV]   
    16:42:53 ACETP1DCAR                AÇMB-LI7-01 85P Defeito TeleProt ETP1       Normal                                        [3 URG]   
    16:42:53 ACETP4DCAR                AÇMB-LI7-01 85A Defeito TeleProt ETP4       Normal                                        [3 URG]   
    16:42:54 ACETP3DCAR                AÇMB-LI7-01 85A Defeito TeleProt ETP3       Normal                                        [3 URG]   
    17:00:00 ........................................... Arquivo verificado as 17:00:00 ...................................................
    18:00:00 ........................................... Arquivo verificado as 18:00:00 ..................................................

    Desculpe por muitas dúvidas, se puder me enviar materiais ou códigos que tratem disso, ficarei muito agradecido.


    quinta-feira, 19 de maio de 2016 18:11

Respostas

  • Filipe tudo bem?

    Vamos lá. Como abrir um .txt, ler, e tratar cada linha lida:

                string text = System.IO.File.ReadAllText(@"Arquivo.txt");
    
                string[] linhas = System.IO.File.ReadAllLines(@"Arquivo.txt");
    
                foreach (string linha in linhas)
                {
                    if (!line.Contains("Arquivo verificado"))
                    {
                        //rotina para salvar no banco
                    }
                }
    
    

    Isto aqui acredito que soluciona parte do seu problema.

    Para salvar no banco ter que ver que estrutura tem a tabela e que método você vai usar para acessar o banco. Usando Entity Framework é mais fácil.

    Em todo caso se a dúvida é como carregar os campos da tabela com os dados de cada linha seria algo assim usando um EDMX de Entity Framework para acessar o banco:

    MeuBancoDeDadosEntities db = new MeuBancoDeDadosEntities();
    
    string[] valores = linha.Split(';');
    RegistroTabela reg = new RegistroTabela;
    reg.Campo1 = valores[0];
    reg.Campo2 = valores[1];
    .
    .
    .
    reg.Campo9 = valores[9];
    
    db.TabelaNoBanco.Add(reg);
    db.SaveChanges;
    Com nome reais ficaria mais fácil de explicar, mas acho que este código pode te dar uma ideia de como fazer o que você quer.

    quinta-feira, 19 de maio de 2016 19:44

Todas as Respostas

  • Filipe tudo bem?

    Vamos lá. Como abrir um .txt, ler, e tratar cada linha lida:

                string text = System.IO.File.ReadAllText(@"Arquivo.txt");
    
                string[] linhas = System.IO.File.ReadAllLines(@"Arquivo.txt");
    
                foreach (string linha in linhas)
                {
                    if (!line.Contains("Arquivo verificado"))
                    {
                        //rotina para salvar no banco
                    }
                }
    
    

    Isto aqui acredito que soluciona parte do seu problema.

    Para salvar no banco ter que ver que estrutura tem a tabela e que método você vai usar para acessar o banco. Usando Entity Framework é mais fácil.

    Em todo caso se a dúvida é como carregar os campos da tabela com os dados de cada linha seria algo assim usando um EDMX de Entity Framework para acessar o banco:

    MeuBancoDeDadosEntities db = new MeuBancoDeDadosEntities();
    
    string[] valores = linha.Split(';');
    RegistroTabela reg = new RegistroTabela;
    reg.Campo1 = valores[0];
    reg.Campo2 = valores[1];
    .
    .
    .
    reg.Campo9 = valores[9];
    
    db.TabelaNoBanco.Add(reg);
    db.SaveChanges;
    Com nome reais ficaria mais fácil de explicar, mas acho que este código pode te dar uma ideia de como fazer o que você quer.

    quinta-feira, 19 de maio de 2016 19:44
  • Boa tarde, 

    Obrigado,  vou tentar fazer aqui, depois dou um retorno. Lembrando que o arquivo ñ tem estes separadores (;) e sim larguras fixas. Qdo eu obtiver avanço, retorno aqui.

    sexta-feira, 20 de maio de 2016 17:49
  • Filipe tudo bem?

    Se os campos dentro do txt tem comprimento fixo da para tratar cada linha com substring. Por exemplo, os dois primeiros campos do txt, o primeiro é hora que é um string de 8. É só extrair da linha começando na posição 0 e extraindo 8. O segundo campo parece ser string de 20, dai extrai começando na posição 10 e comprimento de 20 caracteres, etc. Assim faz com todos os campos da linha como no exemplo abaixo:

    reg.Campo1 = linha.substring(0,8);
    reg.Campo2 = linha.substring(10,20);
    
    
    Funciona caso os campos tenham algum padrão de tamanho claro.

    sexta-feira, 20 de maio de 2016 18:26