Usuário com melhor resposta
Como encontrar determinada palavra em .txt e ignorá-la em C#?

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.
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.
- Marcado como Resposta Thales F Quintas sexta-feira, 20 de maio de 2016 14:38
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.
- Marcado como Resposta Thales F Quintas sexta-feira, 20 de maio de 2016 14:38
-
-
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.