Nada de errado com o CSV até certo ponto
O CSV funciona bem para dados rigidamente definidos que dificilmente mudarão de formato e não causam muitas surpresas no analisador de destinatários.
Aqui está uma lista útil das grandes dicas:
- Escapando "" s dentro de "" s (o campo contém delimitador de campo)
- "" s contendo CRLFs (o campo contém delimitador de linha)
- Unicode (o formato do texto subjacente pode ser insuficiente)
- Terminadores de linha diferentes para sistemas operacionais diferentes (é CR ou CRLF ou LF ou NUL?)
- Comentários embutidos (linha prefixada com #, //, -,; etc)
- Gerenciamento de versão (a versão mais recente do arquivo contém mais ou menos campos)
- Diferenciar entre dados nulos e vazios (, "" está vazio, mas ,, é nulo?)
Você pode abordar isso com um cabeçalho de metadados que descreve como os campos devem ser analisados, mas também pode usar apenas XML. É por causa desse tipo de bagunça CSV de forma livre que foi inventada. A abordagem XML parece muito pesada para o que poderia, em face disso, ser um problema simples.
Uma alternativa popular é a estratégia "delimitador de caracteres estranhos". Isso contorna muitos dos problemas de escape acima, porque você usa algo como um | caractere (pipe) para delimitação de campo e um CRLF para finalização de registro. Isso não contorna a questão do campo de várias linhas (a menos que você use um contador de campo), mas você obtém linhas bem formatadas para humanos.
No geral, se você está procurando uma maneira simples de lidar com esse tipo de arquivo, no mundo Java, você pode simplesmente jogar o OpenCSV nele. Dessa forma, você abstrai todos os problemas em uma estrutura estabelecida.