Lendo arquivos CSV com Linq

Entendendo o motivo

No desenvolvimento sempre nos deparamos com a necessidade de ler arquivos no formato CSV, várias pessoas fazem a leitura do arquivo utilizando o while lendo linha a linha, mas existe outras formas de fazer esse tipo de leitura, uma delas é utilizando o linq.

Um pouco sobre o Linq

Uma consulta é uma expressão que recupera dados de uma fonte de dados. As consultas normalmente são expressas em uma linguagem de consulta especializada. Diferentes linguagens foram desenvolvidas ao longo do tempo para os diversos tipos de fontes de dados, por exemplo, SQL para bancos de dados relacionais e o XQuery para XML. Portanto, os desenvolvedores precisaram aprender uma nova linguagem de consulta para cada tipo de fonte de dados ou formato de dados que eles tinham que oferecer suporte. O LINQ simplifica essa situação ao oferecer um modelo consistente para trabalhar com os dados entre vários tipos de fontes e formatos de dados. Em uma consulta LINQ, você está sempre trabalhando com objetos. Você usa os mesmos padrões básicos de codificação para consultar e transformar dados em documentos XML, bancos de dados SQL, conjuntos de dados do ADO.NET, coleções do .NET e qualquer outro formato para o qual um provedor LINQ estiver disponível.

Exemplo prático

Bem vamos ver um exemplo prático da utilização do link para ler um arquivo csv, no nosso exemplo vou usar um CSV com 3 colunas conforme abaixo:

A primeira parte do comando já é conhecida, vamos ler o arquivo passando o path dele:

Com isso já estamos com o arquivo em memória, agora vem a flexibilidade de se usar o linq, vamos usar o comando “Select” do link:

 

Estamos falando para o Linq pegar tudo que está na memória e retornar um objeto dando um “Split” onde ele encontrar um ‘;’. Com isso o linq vai gerar um objeto do tipo IEnumerable retornando o tipo que foi encontrado, para finalizar podemos transformar todo o resultado em uma lista dando um “.ToList” ao fim do comando, abaixo o comando completo:

 

Se processar o arquivo utilizando o comando teremos o seguinte resultado:

Uma lista com o array de strings de 3 posições.

Explorando um pouco a mais do recurso

Como podemos ver a flexibilidade é bem grande, então podemos fazer o seguinte, ler nosso CSV e já manipular o mesmo para criar uma lista já mapeando ele para uma classe.

Abaixo eu vou mapear o CSV para uma classe chamada cliente onde a mesma vai ter a seguinte estrutura:

 

Vamos usar o linq para criar uma lista de clientes, lendo do arquivo CSV, no mesmo comando vamos adicionar mais um select ao final do último, conforme abaixo:

Podemos ver que já estamos mandando retornar um objeto do tipo Cliente que já está sendo alimentado com os dados que estão no CSV, abaixo o código completo:

 

Dessa forma agora estamos retornando a lista de Cliente para nossa aplicação, assim é mais fácil a manipulação do CSV, abaixo o resultado final em uma aplicação desktop:

Conclusão

Vimos então que a manipulação de um arquivo com o linq é bem mais simples do que utilizando outras formas. Outra observação a que ser feita é que o processo utilizando linq é mais rápido que utilizando um while. Espero que tenha sido proveitosa a dica, até a próxima.

Referência

https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/linq/introduction-to-linq-queries

Projeto Exemplo:

https://github.com/tborgesvieira/CsvReadLink

Posted in .NET, Blog, C#, Clean Code, Linq.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *