Элементарная реализация «читалки» файлов конфигураций 1С (cf, epf, erf)
Сделано по этому описанию:
Компонент для чтения CF-формата. Описание CF-формата.
При разработке подглядывал в исходный код Elisy.CfInspector и V8Unpack
Исходник модуля в открытом доступе: cf_reader.lua
Модуль экспортирует три функции: NewFileReader(file, buflen), NewStringReader(s) и ReadImage(rd)
Первые две создают ридеры над файлами и строками с единым интерфейсом: read(len), setpos(newpos), pos(), size()
ReadImage принимает ридер и возвращает объект Image: Header, Pages, Pointers, Rows()
Метод Image.Rows() возвращает итератор по элементам Row файла CF (см. описание формата)
Пример:
for ID, Body, Header, Packed in Image.Rows() do
— do something
end
ID — идентификатор данных в UTF-8 (строка)
Body — тело данных (строка)
Header — заголовок данных (объект)
Packed — признак упаковки алгоритмом DEFLATE (булево)
cf_reader не умеет распаковывать данные. Для этого нужно использовать сторонние библиотеки.
Вот пример с использованием zlib: cf_unpack.lua
Этот скрипт распаковывает конфигурацию в папку:
luajit.exe cf_unpack.lua c: emp1Cv8.cf c: emp1Cv8_cf
Вот пример с использованием miniz: cf_repack.lua
Этот скрипт переупаковывает конфигурацию в zip-архив:
luajit.exe cf_repack.lua c: emp1Cv8.cf c: emp1Cv8.zip
Примеры написаны для компилятора LuaJIT (используется ffi)
Для cf_reader доcтаточно интерпретатора Lua, но рекомендую все же использовать jit-компилятор.
Инструкция по установке:
1. Распакуйте LuaJIT_201.zip и 1c-toolkit.zip в одну папку (например c:LuaJIT_201)
2. Добавьте путь к этой папке в переменную среды PATH
Обновление 08.04.2013 Теперь утилиты можно установить с помощью удобного инсталлятора.
На чем еще осталось чтение цфников реализовать?
Питон, javascript и 1С ?
(1) orefkov, на питоне было бы неплохо. Ибо в линуксах он обычно есть по дефолту. У Lua тоже есть движение в этом направленииhttp://www.linux.org.ru/news/bsd/8878745
(1) orefkov, на Lazarus ещё хочу 🙂
(1) На 1с было бы круто 🙂
Круто. Полагаю тем, кто знает про луа — это пригодится.
Плюсую! Следующий должен как миниму на Ada 94 написать аналог. Или еще лучше — на GPSS.
На брейнфаке еще можно 😀
http://ru.wikipedia.org/wiki/Brainfuck
(3) andrewks, у магистра попроси исходникиhttp://infostart.ru/public/124213/ , думаю, он хорошему человеку не откажет.
Поправил критическую ошибку в примере cf_unpack
https://bitbucket.org/boris_coder/1c-toolkit/downloads
Архив обновлен
(0) А меня сильно рассмешило сопоставление картинки из фильма и заголовка — наверное, именно так и делается чтение cf.
«+» за отличное настроение!!!
Автор хорошо разбирается в LUA. Может и на QLUA поможете, что — нибудь написать?
(10) d@ncer, я пока еще только изучаю Lua 🙂 И во многом не разбираюсь. Эти публикации просто побочный продукт этого моего нового хобби.
Про QLUA первый раз слышу. Нужно смотреть.