2009-10-14 18 views
14

Hay un formato estándar o abierto que se puede usar para describir el formateo de un archivo plano. Mi empresa integra muchos formatos diferentes de archivos de clientes. Con un archivo XML, es fácil obtener o crear un XSD para describir el formato de archivo XML. Estoy buscando algo similar para describir un formato de archivo plano (ancho fijo, delimitado, etc.). Stylus Studio usa un formato propietario .conv para hacer esto. Ese formato .conv se puede usar en tiempo de ejecución para transformar un archivo plano arbitrario en un archivo XML. Me preguntaba si había más métodos abiertos o basados ​​en estándares para hacer lo mismo.¿Hay un formato estándar para describir un archivo plano?

Estoy buscando un método para describir una variedad de formatos de archivo planos, ya sean de ancho fijo o delimitados, por lo que CSV no es una respuesta a esta pregunta.

+5

No sé que acaba de votar por esta pregunta y todas sus respuestas. Es una pregunta perfectamente válida con respuestas útiles. Ten un +1 en mi –

+2

no estoy seguro estoy de acuerdo las respuestas son particularmente útiles ya que la mayoría ni siquiera están respondiendo a la pregunta que estoy haciendo, pero no sé por qué la pregunta sería downvoted :( – Stimy

+2

No voté nada en el estómago, pero el hecho de que todos y cada uno responde mal entendido la pregunta es evidencia de que la pregunta es malo-escrito. Si se quiere mejorar por lo que debe editar la pregunta así que tiene sentido, no vota para arriba. –

Respuesta

7

XFlat: http://www.infoloom.com/gcaconfs/WEB/philadelphia99/lyons.HTM#N29 http://www.unidex.com/overview.htm

Para los casos complejos (por ejemplo, archivos de registro) se puede considerar un analizador léxico.

+0

¡Hola! Este realmente responde la pregunta. Encontré XFlat en una búsqueda anterior sobre el tema, pero no puedo encontrar mucha información sobre quién lo posee, si es un estándar real, etc. Unidex también proporciona herramientas para tomar la descripción de XFlat y un archivo plano para transformar en XML (http://www.unidex.com/xflat.htm) – Stimy

3

Sobre seleccionando los formatos de archivos planos existentes: No es el formato Comma-separated values (CSV). O, más en general, DSV. Pero estos no son de "ancho fijo", ya que hay un carácter delimitador (como una coma) que separa celdas individuales. Tenga en cuenta que aunque CSV es standardized, no todos se adhieren a la norma. Además, CSV puede ser simple para sus propósitos, ya que no permite una estructura de documentos enriquecida.

En este sentido, los formatos estandarizados y solo un poco más complejos (pero por lo tanto más útiles) JSON y YAML son una mejor opción. Ambos son compatibles con la mayoría de los idiomas.

Su mejor opción es echar un vistazo a todos los idiomas enumerados como no binarios en this overview y luego determinar cuál funciona mejor para usted.

Sobre que describen los formatos de archivos planos: Esto podría ser muy fácil o difícil, dependiendo del formato. Aunque en la mayoría de los casos existen soluciones más sencillas, una forma en que funcionará en general es ver el formato de archivo como formal grammar, y escribir un lexer/ para ello. Pero lo admito, eso es bastante & dagger; maquinaria pesada.

Si tiene suerte, un par de regular expressions avanzados pueden hacer el truco. Sin embargo, la mayoría de los formatos no se prestarán para eso. & Dagger; Si planea escribir un analizador/analizador lexer usted mismo, puedo aconsejar PLY (Python Lex-Yacc). Pero existen muchas otras soluciones, en muchos idiomas diferentes, muchas más convenientes que las de la vieja escuela Lex & Yacc. Para más información, véase el What parser generator do you recommend?


    y daga;: Sí, eso puede ser un eufemismo.
    & Dagger;: Incluso describir correctamente el email address format no es trivial.

0

CSV

CSV es un formato de datos delimitado que tiene campos/columnas separadas por el carácter coma y registros/filas separadas por saltos de línea. Los campos que contienen un carácter especial (coma, línea nueva o comillas dobles) se deben incluir entre comillas dobles. Sin embargo, si una línea contiene una sola entrada que es la cadena vacía, puede estar entre comillas dobles.Si el valor de un campo contiene un carácter de comillas dobles, se escapa colocando otro carácter de comillas dobles al lado. El formato de archivo CSV no requiere una codificación de caracteres específica, orden de bytes o formato de terminador de línea.


La entrada CSV en la wikipedia me permitió encontrar un comparison of data serialization formats que es bastante más de lo que pidió.

+0

Buen enlace en la comparación de formatos de serialización de datos, ¡gracias! –

1

Al final del día, probablemente tendrá que definir su propio estándar de archivos que se ajuste específicamente a sus necesidades de almacenamiento. Lo que sugiero es usar xml, YAML o JSON como contenedor interno para todos los tipos de archivos que reciba. Además de esto, deberá implementar alguna lógica de validación adicional para mantener los metadatos, como los tamaños de columna de los archivos de ancho fijo (para importar y exportar a ancho fijo). Alternativamente, puede almacenar o vincular un conjunto de metadatos a cada archivo que convierta al formato interno.

Puede haber un estándar por ahí, pero es muy difícil crear soluciones de 'talla única' para estos problemas. Existen herramientas de gestión de relaciones de entidades (Talend, otras) que facilitan la creación de estas asignaciones, pero aún necesitará dedicar mucho tiempo a mantener las definiciones y las reglas del formato de archivo.

En cuanto a imponer el ancho de columna, xml podría ser la mejor solución ya que puede describir los formatos utilizando esquemas xml (con la restricción de longitud). Para YAML o JSON, puede que tenga que escribir su propia lógica para esto, aunque estoy seguro de que alguien más ha encontrado una solución.

Ver XML vs comma delimited text files para más referencia.

+1

No tengo opción en cuanto a qué formato usar. Los clientes están proporcionando archivos planos en forma de delimeted, ancho fijo o XML. Tengo que pasar de esos formatos a un formato interno. Simple de hacer con XML, solo use una transformación XSLT. Bastante simple de usar con delimeted, simplemente describa el delimitador y luego cree un archivo XML que pueda tener un XSLT aplicado. Más difícil de hacer con ancho fijo, debe describir cada longitud de campo. Estoy buscando un estándar abierto que describa el ancho fijo y los archivos planos delimitados, así que no tengo que crear mi propia persistencia para ese metadato. – Stimy

+0

Como alternativa, podría usar una herramienta que sepa cómo manipular archivos planos y convertirlos a otros formatos. SSIS viene a la mente (SQL Server Integration Services). –

+0

Pregunta actualizada. @John, sí, la asistencia de herramientas es clave aquí. –

2

COBOL (le guste o no) tiene un formato estándar para describir formatos de registro de ancho fijo en archivos.

Otros formatos de archivo, sin embargo, son algo más simples de describir. Un archivo CSV, por ejemplo, es solo una lista de cadenas. A menudo, la primera fila de un archivo CSV son los nombres de las columnas: esa es la descripción.

Hay ejemplos de uso de JSON para formular metadatos para archivos de texto. Esto se puede aplicar a archivos JSON, archivos CSV y archivos de formato fijo.

Mira http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.html

Se trata de IBM sMash (Project Zero) usando JSON para codificar metadatos. Puede aplicar esto fácilmente a archivos planos.

0

Lo único parecido que conozco es Hachoir, que en la actualidad puede analizar 70 formatos de archivo:

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

No estoy seguro de si realmente se considera como un lenguaje declarativo, ya que es plug-in analizador basado en , pero parece funcionar y es extensible, lo que puede satisfacer sus necesidades.

Como un lado, hay interesantes FORMATOS de archivos planos extensibles estandarizados, como IFF (Interchange File Format).

1

No sé si hay algún formato estándar o abierta para describir un formato de archivo plano. Pero una industria ha hecho esto: la industria bancaria. De hecho, las instituciones financieras se están comunicando utilizando mensajes estandarizados a través de una red dedicada llamada SWIFT. Los mensajes SWIFT originalmente eran posicionales (antes de SWIFTML, la versión XMLified). No sé si es una buena sugerencia, ya que es un poco oscura, pero tal vez podría mirar el SWIFT Formatting Guide, puede darle algunas ideas.

Habiendo dicho esto, echa un vistazo a Flatworm, un analizador de archivos planos humilde. Lo he usado para analizar archivos posicionales y/o CSV y me gustó su formato de descriptor XML. Puede ser una sugerencia mejor que SWIFT :)

Cuestiones relacionadas