Распаковка CF на Lua

Модуль на Lua для чтения CF формата.

Элементарная реализация «читалки» файлов конфигураций 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 не умеет распаковывать данные. Для этого нужно использовать сторонние библиотеки.

Вот пример с использованием zlibcf_unpack.lua 
Этот скрипт распаковывает конфигурацию в папку:
luajit.exe cf_unpack.lua c: emp1Cv8.cf c: emp1Cv8_cf

Вот пример с использованием minizcf_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 Теперь утилиты можно установить с помощью удобного инсталлятора.


11 Comments

  1. orefkov

    На чем еще осталось чтение цфников реализовать?

    Питон, javascript и 1С ?

    Reply
  2. ilov_boris

    (1) orefkov, на питоне было бы неплохо. Ибо в линуксах он обычно есть по дефолту. У Lua тоже есть движение в этом направлении http://www.linux.org.ru/news/bsd/8878745

    Reply
  3. andrewks

    (1) orefkov, на Lazarus ещё хочу 🙂

    Reply
  4. akomar

    (1) На 1с было бы круто 🙂

    Reply
  5. Новиков

    Круто. Полагаю тем, кто знает про луа — это пригодится.

    Плюсую! Следующий должен как миниму на Ada 94 написать аналог. Или еще лучше — на GPSS.

    Reply
  6. ilov_boris

    На брейнфаке еще можно 😀

    http://ru.wikipedia.org/wiki/Brainfuck

    Reply
  7. pumbaE

    (3) andrewks, у магистра попроси исходники http://infostart.ru/public/124213/ , думаю, он хорошему человеку не откажет.

    Reply
  8. ilov_boris

    Поправил критическую ошибку в примере cf_unpack

    Архив обновлен https://bitbucket.org/boris_coder/1c-toolkit/downloads

    Reply
  9. Famza

    (0) А меня сильно рассмешило сопоставление картинки из фильма и заголовка — наверное, именно так и делается чтение cf.

    «+» за отличное настроение!!!

    Reply
  10. d@ncer

    Автор хорошо разбирается в LUA. Может и на QLUA поможете, что — нибудь написать?

    Reply
  11. ilov_boris

    (10) d@ncer, я пока еще только изучаю Lua 🙂 И во многом не разбираюсь. Эти публикации просто побочный продукт этого моего нового хобби.

    Про QLUA первый раз слышу. Нужно смотреть.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *