Ответ 1
XFlat: http://www.infoloom.com/gcaconfs/WEB/philadelphia99/lyons.HTM#N29 http://www.unidex.com/overview.htm
Для сложных случаев (например, файлов журналов) вы можете рассмотреть лексический синтаксический анализатор.
Существует ли стандартный или открытый формат, который может использоваться для описания формирования плоского файла. Моя компания объединяет множество различных форматов файлов клиентов. С XML файлом легко получить или создать XSD для описания формата файла XML. Я ищу что-то похожее, чтобы описать формат плоского файла (фиксированная ширина, разделитель и т.д.). Для этого Stylus Studio использует собственный формат .conv. Этот формат .conv можно использовать во время выполнения, чтобы преобразовать произвольный плоский файл в файл XML. Мне просто интересно, существует ли какой-либо более открытый или основанный на стандартах метод для выполнения того же самого.
Я ищу один способ описания множества форматов плоских файлов, будь то фиксированная ширина или разделитель, поэтому CSV не является ответом на этот вопрос.
XFlat: http://www.infoloom.com/gcaconfs/WEB/philadelphia99/lyons.HTM#N29 http://www.unidex.com/overview.htm
Для сложных случаев (например, файлов журналов) вы можете рассмотреть лексический синтаксический анализатор.
О выборе существующих форматов плоских файлов. Формат разделенных запятыми (CSV). Или, в более общем плане, DSV. Но это не "фиксированная ширина", так как существует разделительный символ (например, запятая), которая разделяет отдельные ячейки. Обратите внимание, что хотя CSV стандартизирован, не все придерживаются стандарта. Кроме того, CSV может быть простым для ваших целей, поскольку он не позволяет создать богатую структуру документа.
В этом отношении стандартизованные и только немного более сложные (но при этом более полезные) форматы JSON и YAML - лучший выбор. Оба поддерживаются из коробки множеством языков.
Лучше всего посмотреть на все языки, перечисленные как не-двоичные в этот обзор, а затем определить, какие из них лучше всего подходят для вас.
Об описании форматов плоских файлов: Это может быть очень легко или сложно, в зависимости от формата. Хотя в большинстве случаев существуют более простые решения, одним из способов, который будет работать в целом, является просмотр формата файла в виде формальной грамматики и запись lexer/parser для него. Но я признаю, что довольно тяжелая техника & dagger;.
Если вам повезет, пара дополнительных регулярных выражений может сделать трюк. Большинство форматов не будут поддаваться этому. & Dagger; Если вы планируете самостоятельно писать лексер/парсер, я могу посоветовать PLY (Python Lex-Yacc). Но многие другие решения существуют на многих разных языках, многие из них более удобны, чем старая школа Lex и Yacc. Подробнее см. Какой генератор парсеров вы порекомендуете?
& dagger;: Да, это может быть преуменьшением.
& Dagger;: Даже правильное описание формат адреса электронной почты не является тривиальным.
COBOL (нравится вам это или нет) имеет стандартный формат для описания форматов записи фиксированной ширины в файлах.
Другие форматы файлов, однако, несколько проще описать. Например, файл CSV представляет собой список строк. Часто первая строка CSV файла - это имена столбцов - это описание.
Есть примеры использования JSON для формулировки метаданных для текстовых файлов. Это можно применить к файлам JSON, файлам CSV и файлам с фиксированным форматом.
Посмотрите http://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.html
Это IBM sMash (Project Zero) с использованием JSON для кодирования метаданных. Вы можете легко применить это к плоским файлам.
В конце дня вам, вероятно, придется определить свой собственный стандартный файл, который специально предназначен для ваших потребностей в хранении. Я предлагаю использовать xml, YAML или JSON в качестве внутреннего контейнера для всех типов файлов, которые вы получаете. Кроме того, вам придется реализовать некоторую дополнительную логику проверки для поддержки метаданных, таких как размеры столбцов файлов фиксированной ширины (для импорта и экспорта в фиксированную ширину). Кроме того, вы можете сохранить или связать набор метаданных с каждым конвертируемым файлом во внутренний формат.
Там может быть стандарт, но это слишком сложно, чтобы создавать решения "один размер подходит всем" для этих проблем. Существуют инструменты управления отношениями с сущностями (Talend, другие), которые упрощают создание этих сопоставлений, но вам все равно придется тратить много времени на поддержку определений и правил формата файла.
Как для обеспечения ширины столбца, xml может быть лучшим решением, так как вы можете описывать форматы с помощью xml-схем (с ограничением длины). Для YAML или JSON вам, возможно, придется написать свою собственную логику для этого, хотя я уверен, что кто-то еще придумал решение.
Подробнее см. XML и текстовые файлы с разделителями-запятыми.
Я не знаю, есть ли какой-либо стандартный или открытый формат для описания формата плоского файла. Но одна отрасль сделала это: банковская индустрия. Финансовые учреждения действительно общаются с помощью стандартизованного сообщения через выделенную сеть под названием SWIFT. Сообщения SWIFT были первоначально позиционными (до SWIFTML, версия с XML). Я не знаю, было ли это хорошим предложением, поскольку оно немного неясное, но, возможно, вы могли бы взглянуть на Руководство по форматированию SWIFT, это может дать вам некоторые идеи.
Сказав это, просмотрите Flatworm, скромный анализатор плоских файлов. Я использовал его для анализа позиционного и/или CSV файла и ему понравился его формат дескриптора XML. Это может быть лучшее предложение, чем SWIFT:)
CSV - это формат данных с разделителями, который имеет поля/столбцы, разделенные символом запятой, и записи/строки, разделенные символами новой строки. Поля, содержащие специальный символ (запятая, новая линия или двойная кавычка), должны быть заключены в двойные кавычки. Однако, если строка содержит единственную запись, которая является пустой строкой, она может быть заключена в двойные кавычки. Если значение поля содержит символ двойной кавычки, оно экранируется путем размещения рядом с ним другого символа двойной кавычки. Формат файла CSV не требует специальной кодировки символов, порядка байтов или формата терминатора строк.
Запись CSV в wikipedia позволила мне найти сравнение сравнения форматов сериализации данных, что в значительной степени соответствует тому, что вы просили.
Единственное, что я знаю, это Hachoir, который в настоящее время может обрабатывать 70 форматов файлов:
http://bitbucket.org/haypo/hachoir/wiki/Home
Я не уверен, действительно ли он считается декларативным языком, поскольку он основан на синтаксическом анализаторе, но, похоже, он работает и расширяется, что может удовлетворить ваши потребности просто.
В стороне, есть интересные стандартизованные, расширяемые форматы форматов файлов, такие как IFF (Interchange File Format).