Существует ли стандартный формат описания плоского файла?

StackOverflow https://stackoverflow.com/questions/1568267

Вопрос

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

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

Это было полезно?

Решение

XКвартира:http://www.infoloom.com/gcaconfs/WEB/philadelphia99/lyons.HTM#N29 http://www.unidex.com/overview.htm

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

Другие советы

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

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

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

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

Если повезет, парочка продвинутых обычные выражения может сработать.Однако большинство форматов не подходят для этого. Если вы планируете писать лексер/парсер самостоятельно, могу посоветовать ПЛИ (Питон Лекс-Якк).Но существует множество других решений, на разных языках, многие из них более удобны, чем старая школа. Лекс и Якк.Подробнее см. Какой генератор парсера вы порекомендуете?


  :Да, это может быть преуменьшением.
  :Даже правильно описывая формат адреса электронной почты не является тривиальным.

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

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

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

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

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

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

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

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

Видеть XML против текстовых файлов с разделителями-запятыми для дальнейшего использования.

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

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

CSV-файл

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


Запись CSV в Википедии позволила мне найти сравнение форматов сериализации данных это примерно то, о чем вы просили.

Единственное, что мне известно, — это Hachoir, который на данный момент может анализировать файлы 70 форматов:

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

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

Кроме того, существуют интересные стандартизированные расширяемые ФОРМАТЫ плоских файлов, такие как IFF (формат файла обмена).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top