Utlizando a FileHelpers para trocar o formato de arquivos csv

Aug 23
2010

No trabalho surgiu a necessidade de migrar o layout de um arquivo texto usado entre a Fenacor e as Seguradoras. O arquivo hoje é um txt simples com registros separados por “;” mais particularmente conhecido como formato CSV. O novo layout contempla mais informações e possui 3 tipos de registros distintos dentro do mesmo arquivo. Isso acabou com a compatibilidade que os sistemas mais antigos tinham com o arquivo. Resumo da brincadeira: tivemos que pensar numa solução genérica para resolver a situação.

Acabou que o mais prático e barato era receber o arquivo no formato novo, voltar ele pro antigo e permitir que os sistemas continuem trabalhando da mesma forma. Isso gera impacto zero de alteração e manutenção dos sistemas. Criamos então um aplicativo simples que permite mudar a versão do arquivo da Fenacor. Para tal utilizamos a FileHelpers para facilitar o trabalho. E realmente facilitou: quase não escrevi código para fazer isso.

Com a FileHelpers em ação foi necessário definir uma classe para cada tipo de registro  e uma classe orquestradora onde o código de leitura do arquivo novo já preenche um array de objetos todos tipados:

Daí ficou mais fácil ainda pois bastou fazer um “de – para” do formato novo para o antigo e usar o método engine.WriteFile(caminhoArquivoDestino, ListaRegistrosAntigos) . Pronto, está feito. A performance foi ótima poucos segundos para um arquivo com 250 mil registros). Portanto para manipular arquivos texto em .Net não conheço melhor, por isso mesmo recomendo. É open source, muito bem documentada com exemplos em código e com um wizard, testada com NUnit e em evolução constante. Muito boa.

Link: www.filehelpers.com

I Workshop Brasileiro de Otimização em Engenharia de Software

Jul 23
2010

No programa de mestrado é necessário atingir um número de publicações para conseguir o título de mestre. Além disso artigos e publicações contam como produção acadêmica e pesquisa. Então não tem jeito: tem que escrever! E como meu orientador costuma dizer: vamos escrever logo porque isso aqui é uma esteira de produção, temos que estar sempre produzindo no programa. Sendo assim resolvemos escrever um artigo técnico sobre o andamento da minha pesquisa de dissertação e tentar publicar em simpósios e congressos. Feliz foi a minha surpresa ao ser aceito logo de cara nos dois que tentei:

SSBSE: 2nd International Symposium on Search Based Software Engineering

WOES: XXIV Simpósio Brasileiro de Engenharia de Software (SBES´2010)

Portanto, setembro vai ser um mês cheio pra mim! Logo no início do mês vou à Itália apresentar o trabalho no SSBSE e esticar um pouco a estada, afinal ninguém é de ferro né! Na volta já me preparo para apresentar o trabalho de novo no WOES. Detalhe: em alguns dos comentários dos revisores eu tive um feedback muito positivo. Alguns dos pesquisadores que avaliaram a minha pesquisa lamentaram ela ainda estar num estágio inicial. Isso me deu mais força ainda para ir adiante e fechar esse estudo de caso. Num próximo post falarei do trabalho em si.

Problemas no uso da Enterprise Library (Data Access) com Cursor em Oracle

May 27
2010

Dia desses em pleno projeto de uma migração de sistema me deparo com um problema. Estamos utilizando a Enterprise Library 5.0 para acesso a dados. Como se trata de um sistema legado onde apenas a interface está sendo migrada (base Oracle) a idéia era simples: usar toda a parte de banco pronta e alterar o mínimo necessário. O objetivo do projeto é melhorar a experiência do usuário ao usar o sistema. Migrando para uma interface web, naturalmente, a experiência do usuário vai melhorar. Hoje o sistema está desenvolvido em Forms (Oracle).

Cá estou com um dos desenvolvedores quando vem o primero dilema. Como já usamos inumeras vezes a EL para acesso ao SQL Server temos vários e vários códigos de referência. Baseados nisso escrevemos as chamados de procedure e tudo mais. Porém, na hora dos testes veio o susto: os objetos command não conseguiam criar a lista de parametros para execução no banco. Depois de uma rápida busca no google veio a resposta: a instrução SQL precisa ser construída com um curinga diferente no caso do Oracle. Ao invés do uso do “@” antes do nome do parametro, precisamos colocar “:”. Aí é que vem o X da questão. A proposta da EL é tornar o acesso independente da fonte de dados. Você pode fazer um acesso específico, mas no final das contas o ganho está em abstrair a camada de dados e passar intruções que seriam traduzidas para necessidade de cada banco configurado. Porque então “cargas d’água” não fizeram ali uma inteligência que traduzisse isso? Se for “@” sendo enviado para uma base Oracle, troca pra “:”. No contrário: fazia-se o inverso oras!

Pois bem, eu não ia perder tempo com um post pra reclamar disso. Esclarecido que precisávamos escrever as instruções SQL com “:” e não com o “@”, fomos adiante e nos deparamos com outro problema. Esse já foi melhorzinho, mais rebuscado. Ao fazer uso de uma instrução que usava Cursor a EL devolvia um erro dizendo que o número de parâmetros estava errado. Vi e revi: o número estava certo. Daí comecei a me perguntar o que havia de diferente para a EL retornar um erro desse tipo. Me ocorreu que se houve necessidade de adaptar a instrução para que os parametros fossem criados, esse erro de agora era porque ela não conseguia criar um dos parametros da instrução. Daí chutei logo que fosse o cursor. Estava certo. A EL não trata o tipo correto no Oracle para cursores. Tanto é que o Rain Man Alex escreveu um artigo no Code Project sobre esse problema (Microsoft Enterprise Library Data Access Block [DAAB] on Oracle Provider [ODP.NET]). Resumidamente: o cara trocou o provider para Oracle que é distribuído junto com a EL pelo ODP.Net . Ele disponibilizou a EL alterada e detalhou tudo direitinho. Vale a leitura.

De novo não consegui entender como uma biblioteca como a EL chega na versão 5 com esse tipo de furo. Mas beleza, fica aí a dica para quem precisar trabalhar com Cursor no Oracle usando a Enterprise Library. Use a versão com ODP.Net quu tudo roda direitinho.

Visit Our Friends!

A few highly recommended friends...

Archives

All entries, chronologically...

Pages List

General info about this blog...