Pergunta

Existe um formato padrão ou aberto que pode ser usado para descrever a formação de um arquivo plano. Minha empresa integra muitos formatos diferentes de arquivos de clientes. Com um arquivo XML, é fácil obter ou criar um XSD para descrever o formato do arquivo XML. Estou procurando algo semelhante para descrever um formato de arquivo plano (largura fixa, delimitada etc.). O Stylus Studio usa um formato .conv proprietário para fazer isso. Esse formato .conv pode ser usado no tempo de execução para transformar um arquivo arbitrário plano em um arquivo XML. Eu estava me perguntando se havia mais algum método aberto ou baseado em padrões para fazer a mesma coisa.

Estou procurando um método para descrever uma variedade de formatos de arquivo plano, seja em largura fixa ou delimitados, portanto, o CSV não é uma resposta para esta pergunta.

Foi útil?

Solução

Xflat:http://www.infoloom.com/gcaconfs/web/philadelphia99/lyons.htm#n29 http://www.unidex.com/overview.htm

Para casos complexos (por exemplo, arquivos de log), você pode considerar um analisador lexical.

Outras dicas

Sobre selecionando existente Formatos de arquivo plano: Existe o Valores Separados Por Virgula (CSV) formato. Ou, mais geralmente, Dsv. Mas estes não são "largura fixa", pois há um caractere delimitador (como uma vírgula) que separa células individuais. Observe que, embora o CSV seja padronizado, nem todo mundo adere ao padrão. Além disso, o CSV pode ser simples para seus propósitos, pois não permite uma estrutura rica de documentos.

A esse respeito, os formatos padronizados e apenas um pouco mais complexos (mas, portanto, mais úteis) JSON e Yaml são uma escolha melhor. Ambos são suportados para fora da caixa por muitos idiomas.

Sua melhor aposta é dar uma olhada em todos os idiomas listados como não binários em Esta visão geral e então determine quais funcionam melhor para você.

Sobre descrevendo Formatos de arquivo plano: Isso pode ser muito fácil ou difícil, dependendo do formato. Embora na maioria dos casos existam soluções mais fáceis, uma maneira que funcionará em geral é ver o formato de arquivo como um gramática formal, e escreva um Lexer/analisador para isso. Mas eu admito, isso é bastante maquinário pesado.

Se você tiver sorte, um par de avançados expressões regulares Pode fazer o truque. A maioria dos formatos não se presta a isso, no entanto. Se você planeja escrever um lexer/analisador, posso aconselhar Dobra (Python lex-yacc). Mas muitas outras soluções existem, em muitos idiomas diferentes, muitos deles mais convenientes do que a velha escola Lex & Yacc. Para mais, veja Qual gerador de analisador você recomenda?


  : Sim, isso pode ser um eufemismo.
  : Mesmo descrevendo corretamente o Formato de endereço de e -mail não é trivial.

O COBOL (goste ou não) possui um formato padrão para descrever formatos de registro de largura fixa nos arquivos.

Outros formatos de arquivo, no entanto, são um pouco mais simples de descrever. Um arquivo CSV, por exemplo, é apenas uma lista de strings. Muitas vezes, a primeira linha de um arquivo CSV são os nomes das colunas - essa é a descrição.

Existem exemplos de uso do JSON para formular metadados para arquivos de texto. Isso pode ser aplicado a arquivos JSON, arquivos CSV e arquivos de formato fixo.

Olhe para http://www.projectzo.org/smash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.html

Este é o Smash (Project Zero) da IBM usando o JSON para codificar metadados. Você pode aplicar facilmente isso em arquivos planos.

No final do dia, você provavelmente terá que definir seu próprio padrão de arquivo que atenda especificamente às suas necessidades de armazenamento. O que eu sugiro é usar XML, YAML ou JSON como seu contêiner interno para todos os tipos de arquivos que você recebe. Além disso, você precisará implementar uma lógica de validação extra para manter metadados, como os tamanhos das colunas dos arquivos de largura fixa (para importar e exportar para a largura fixa). Como alternativa, você pode armazenar ou vincular um conjunto de metadados a cada arquivo que você converte no formato interno.

Pode haver um padrão por aí, mas é muito difícil criar soluções de 'tamanho único' para esses problemas. Existem ferramentas de gerenciamento de relacionamento de entidade por aí (Talend, outras) que facilitam a criação desses mapeamentos, mas você ainda precisará gastar muito tempo mantendo definições e regras de formato de arquivo.

Quanto à aplicação da largura da coluna, o XML pode ser a melhor solução, pois você pode descrever os formatos usando esquemas XML (com a restrição de comprimento). Para Yaml ou JSON, você pode ter que escrever sua própria lógica para isso, embora eu tenha certeza de que outra pessoa encontrou uma solução.

Ver Arquivos de texto delimitados xml vs vírgula Para referência adicional.

Não sei se existe algum formato padrão ou aberto para descrever um formato de arquivo plano. Mas um setor fez isso: o setor bancário. As instituições financeiras estão realmente se comunicando usando a mensagem padronizada em uma rede dedicada chamada RÁPIDO. As mensagens SWIFT eram originalmente posicionais (antes da versão swiftML, a versão XMLificada). Não sei se é uma boa sugestão, pois é meio obscura, mas talvez você possa olhar para o Guia de formatação rápida, pode lhe dar algumas idéias.

Dito isto, confira Flatworm, um analisador de arquivo plano humilde. Eu o usei para analisar o arquivo posicional e/ou CSV e gostei do formato do descritor XML. Pode ser uma sugestão melhor do que rápida :)

CSV

O CSV é um formato de dados delimitado que possui campos/colunas separados pelo caractere de vírgula e registros/linhas separados por newlines. Os campos que contêm um caractere especial (vírgula, nova linha ou cotação dupla) devem ser fechados em cotações duplas. No entanto, se uma linha contiver uma única entrada que é a string vazia, ela poderá ser incluída em cotações duplas. Se o valor de um campo contiver um caractere de cotação dupla, ele é escapar colocando outro caractere de cotação dupla ao lado. O formato do arquivo CSV não requer um formato específico de codificação de caracteres, ordem de bytes ou terminador de linha.


A entrada do CSV na Wikipedia me permitiu encontrar um Comparação de formatos de serialização de dados Isso é praticamente o que você pediu.

A única coisa semelhante que eu conheço é Hachoir, que atualmente pode analisar os formatos de arquivo 70:

http://bitbucket.org/haypo/hachoir/wiki/home

Não tenho certeza se realmente conta como uma linguagem declarativa, pois é baseada no analisador de plug -in, mas parece funcionar e é extensível, o que pode atender às suas necessidades.

Como um aparte, existem formatos interessantes de arquivos planos padronizados e extensíveis, como o IFF (formato de arquivo de intercâmbio).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top