2009-10-14 3 views
14

Существует стандартный или открытый формат, который может использоваться для описания формирования плоского файла. Моя компания объединяет множество различных форматов файлов клиентов. С XML-файлом легко получить или создать XSD для описания формата файла XML. Я ищу что-то похожее, чтобы описать формат плоского файла (фиксированная ширина, разделитель и т. Д.). Для этого Stylus Studio использует собственный формат .conv. Этот формат .conv можно использовать во время выполнения, чтобы преобразовать произвольный плоский файл в файл XML. Мне просто интересно, существует ли какой-либо более открытый или основанный на стандартах метод для выполнения того же самого.Существует ли стандартный формат описания плоского файла?

Я ищу один способ описания различных форматов плоских файлов, независимо от того, установлены они фиксированной ширины или разделители, поэтому CSV не является ответом на этот вопрос.

+5

Я не знаю, кто просто проголосовал за этот вопрос и все его ответы. Это очень правильный вопрос с полезными ответами. У меня есть +1. –

+2

Я не уверен, что согласен, что ответы особенно полезны, поскольку большинство из них даже не отвечает на вопрос, который я задаю, но я не знаю, почему вопрос был бы ниспроверен :( – Stimy

+2

Я ничего не голосовал, но тот факт, что каждый ответчик неправильно понял вопрос, является доказательством того, что вопрос плохо написан. Если вы хотите улучшить SO, вы должны отредактировать вопрос, чтобы он имел смысл, а не проголосуйте за него. –

ответ

7

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

В сложных случаях (например, лог-файлы) вы можете рассмотреть лексический анализатор.

+0

Эй! Этот вопрос действительно отвечает на вопрос. Я нашел XFlat в более раннем поиске по этой проблеме, но не могу найти много информации о том, кто ее владеет, если это реальный стандарт. Unidex также предоставляет инструменты для описания XFlat и плоского файла, чтобы преобразовать он в XML (http://www.unidex.com/xflat.htm) – Stimy

3

О Выберите существующий плоские форматы файлов: Существует формат Comma-separated values (CSV). Или, в более общем плане, DSV. Но это не «фиксированная ширина», так как существует разделительный символ (например, запятая), которая разделяет отдельные ячейки. Обратите внимание, что хотя CSV standardized, не все придерживаются стандарта. Кроме того, CSV может быть простым для ваших целей, поскольку он не позволяет создавать богатую структуру документа.

В этом отношении предпочтительными являются стандартизованные и только немного более сложные (но при этом более полезные) форматы JSON и YAML. Оба они поддерживаются на большом количестве языков.

Ваш лучший выбор - посмотреть на все языки, перечисленные как небинарные, в this overview, а затем определить, какие из них лучше всего подходят для вас.

О описывающие плоские форматы файлов: Это может быть очень легко или трудно, в зависимости от формата. Хотя в большинстве случаев существуют более простые решения, одним из способов, который будет работать в целом, является просмотр формата файла в виде formal grammar и запись для него lexer/. Но я признаю, что это довольно & dagger; тяжелая техника.

Если вам повезет, пара продвинутых regular expressions может сделать трюк. Однако большинство форматов не поддаются на это. & Кинжал; Если вы планируете самостоятельно писать лексер/парсер, я могу посоветовать PLY (Python Lex-Yacc). Но многие другие решения существуют на многих разных языках, многие из них более удобны, чем старая школа Lex & Yacc. Более подробно см What parser generator do you recommend?


    & нож;: Да, это может быть преуменьшением.
    & Dagger;: Даже правильное описание email address format не является тривиальным.

0

CSV

CSV является разделителями формат данных, который имеет поля/столбцов, разделенных символом запятой и записей/строк, разделенных символами новой строки. Поля, содержащие специальный символ (запятая, новая линия или двойная кавычка), должны быть заключены в двойные кавычки. Однако, если строка содержит единственную запись, которая является пустой строкой, она может быть заключена в двойные кавычки.Если значение поля содержит символ двойной кавычки, оно экранируется путем размещения рядом с ним другого символа двойной кавычки. Формат файла CSV не требует специальной кодировки символов, порядка байтов или формата терминатора строки.


Запись CSV на википедии позволило мне найти comparison of data serialization formats, которое в значительной степени то, что вы просили.

+0

Хорошая ссылка на сравнение форматов сериализации данных, спасибо! –

1

В конце дня вам, вероятно, придется определить свой собственный стандартный файл, который специально предназначен для ваших нужд хранения. Я предлагаю использовать xml, YAML или JSON в качестве внутреннего контейнера для всех типов файлов, которые вы получаете. Кроме того, вам придется реализовать некоторую дополнительную логику проверки для поддержки метаданных, таких как размеры столбцов файлов фиксированной ширины (для импорта и экспорта в фиксированную ширину). Кроме того, вы можете сохранить или связать набор метаданных с каждым конвертируемым файлом во внутренний формат.

Там может быть стандарт, но слишком сложно создавать решения «один размер подходит всем» для этих проблем. Существуют инструменты управления отношениями с сущностями (Talend, другие), которые упрощают создание этих сопоставлений, но вам все равно придется тратить много времени на поиск определений и правил формата файла.

Как для обеспечения ширины столбца, xml может быть лучшим решением, так как вы можете описывать форматы с помощью xml-схем (с ограничением длины). Для YAML или JSON вам, возможно, придется написать свою собственную логику, хотя я уверен, что кто-то еще придумал решение.

См. XML vs comma delimited text files для получения дополнительной информации.

+1

У меня нет выбора, какой формат использовать. Клиенты предоставляют плоские файлы в виде разделительной, фиксированной ширины или XML. Мне нужно перейти из этих форматов во внутренний формат. Простое использование XML, просто используйте преобразование XSLT. Довольно просто сделать с delimeted, просто описать разделитель, а затем создать XML-файл, который может иметь XSLT. Сложнее всего использовать фиксированную ширину, вы должны описывать каждую длину поля. Я ищу открытый стандарт, который может описывать фиксированные ширины и ограниченные плоские файлы, поэтому мне не нужно создавать собственное сопротивление для этих метаданных. – Stimy

+0

В качестве альтернативы вы можете использовать инструмент, который знает, как манипулировать плоскими файлами и преобразовывать их в другие форматы. SSIS приходит на ум (службы интеграции SQL Server). –

+0

Вопрос обновлен. @John, да помощь инструмента здесь. –

2

COBOL (нравится вам это или нет) имеет стандартный формат для описания форматов записи фиксированной ширины в файлах.

Другие форматы файлов, однако, несколько проще описать. Например, файл CSV представляет собой список строк. Часто первая строка CSV-файла - это имена столбцов - это описание.

Есть примеры использования JSON для формулировки метаданных для текстовых файлов. Это можно применить к файлам JSON, файлам CSV и файлам с фиксированным форматом.

Посмотрите на http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.html

Это SMASH от IBM (Project Zero) с использованием JSON для кодирования метаданных. Вы можете легко применить это к плоским файлам.

0

Единственная подобная вещь я знаю это Hachoir, который в настоящее время может разобрать 70 форматов файлов:

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

Я не уверен, если это действительно имеет значение, как декларативный язык, так как это плагин анализатор на основе , но, похоже, он работает и расширяется, что вполне может удовлетворить ваши потребности.

В качестве альтернативы существуют интересные стандартизированные расширяемые форматы файлов FORMATS, такие как IFF (Interchange File Format).

1

Я не знаю, есть ли какой-либо стандартный или открытый формат для описания формата плоского файла. Но одна отрасль сделала это: банковская индустрия. Финансовые учреждения действительно общаются с помощью стандартизованного сообщения через выделенную сеть под названием SWIFT. Сообщения SWIFT были первоначально позиционными (до SWIFTML, версия с XML). Я не знаю, хорошее ли это предложение, потому что это неясно, но, может быть, вы можете посмотреть на SWIFT Formatting Guide, это может дать вам некоторые идеи.

Сказав это, ознакомьтесь с Flatworm, смиренным анализатором плоских файлов. Я использовал его для анализа позиционного и/или CSV-файла и ему понравился его формат дескриптора XML. Это может быть лучшее предложение, чем SWIFT :)