Элементарная реализация "читалки" файлов конфигураций 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:\temp\1Cv8.cf c:\temp\1Cv8_cf\
Вот пример с использованием miniz: cf_repack.lua
Этот скрипт переупаковывает конфигурацию в zip-архив:
luajit.exe cf_repack.lua c:\temp\1Cv8.cf c:\temp\1Cv8.zip
Примеры написаны для компилятора LuaJIT (используется ffi)
Для cf_reader доcтаточно интерпретатора Lua, но рекомендую все же использовать jit-компилятор.
Инструкция по установке:
1. Распакуйте LuaJIT_201.zip и 1c-toolkit.zip в одну папку (например c:\LuaJIT_201\)
2. Добавьте путь к этой папке в переменную среды PATH
Обновление 08.04.2013 Теперь утилиты можно установить с помощью удобного инсталлятора.