gifts2017

Альтернативное сравнение конфигураций

Опубликовал Борис Илов (ilov_boris) в раздел Программирование - Практика программирования

Скрипт на Lua, показывающий отличия между двумя отчетами по конфигурациям. Работает из командной строки. Принимает файлы в кодировках ANSI и UTF-8 with BOM.

Кроме того скрипт позволяет просто отсортировать файлы, чтобы затем сравнить их вашей любимой утилитой сравнения (например WinMerge)

 С помощью этого скрипта можно сравнить два отчета по конфигурациям, и получить результат в следующем виде:

diff_conf

стрелка "-->" показывает что объект присутствует только во втором файле

Результат содержит только отличия. Исходный порядок объектов игнорируется.

Отчет по конфигурации можно получить так:

conf_report

ВНИМАНИЕ! Отчет по умолчанию сохраняется в кодировке UTF-16.

Скрипт принимает в качестве аргументов два файла в кодировке ANSI или UTF-8 with BOM.
При этом кодировка второго файла должна быть как у первого.

diff_conf.lua conf_rep1.txt conf_rep2.txt

Результат будет выведен в консоль.

Можно перенаправить вывод в файл:

diff_conf.lua conf_rep1.txt conf_rep2.txt > conf1_vs_conf2.txt

Если указан только один файл, то скрипт отсортирует его с учетом структуры и выведет результат в консоль:

diff_conf.lua conf_rep.txt

Как и в первом случае, вывод можно перенаправить в файл:

diff_conf.lua conf_rep.txt > conf_rep_sorted.txt

Отсортированные файлы можно сравнить например с помощью WinMerge:

WinMerge

Вызов без аргументов выведет на экран краткую справку:

Usage: diff_conf.lua first_file [second_file] [> result_file]

Examples:
c:\>diff_conf.lua conf.txt
c:\>diff_conf.lua conf.txt > conf_sorted.txt
c:\>diff_conf.lua conf1.txt conf2.txt
c:\>diff_conf.lua conf1.txt conf2.txt > conf1_vs_conf2.txt

Дистрибутив Lua для windows можно скачать по этой ссылке: http://code.google.com/p/luaforwindows/downloads/list


Скачать файлы

Наименование Файл Версия Размер
diff_conf.lua 14
.lua 3,48Kb
11.12.12
14
.lua 3,48Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Борис Илов (ilov_boris) 12.12.12 12:03
Перезалил скрипт. Поправлена незначительная ошибка при выводе в консоль.
2. Олег Шалимов (CaSH_2004) 19.01.13 18:35
А область применения такого труда? Или это курсовая работа или изучения возможностей Lua?
3. Борис Илов (ilov_boris) 19.01.13 18:56
(2) Какого труда? O_o
Этот скрипт позволяет быстро, просто и наглядно сравнить две конфигурации. Причем это сравнение не на столько детальное как встроенный в платформу механизм. Не показываются отличия в модулях, формах и изменение порядка объектов. Но при этом хорошо видно изменение типов реквизитов, состава регистраторов и т.д. Ценность этой утилиты поймут те, кому приходилось обновлять УПП с большим количеством правок (когда отчет о сравнении >= 100000 строк). Тем кто хорошо понимает и умеет пользоваться 3-way merge, встроенным в платформу, утилита может быть просто средством контроля, что ничего не "слетело" при обновлении.
Лично мне очень помогает при обновлении конфигураций. Раньше у меня была обработка для этих целей, но она очень медленно работала (2-3 мин.) А этот скрипт да - побочный продукт ковыряния Lua :)
4. Борис Илов (ilov_boris) 20.01.13 19:29
(2) CaSH_2004, если интересует, то скрипт "родился" здесь:
http://oberspace.dyndns.org/index.php/topic,392.0.html
5. Олег Шалимов (CaSH_2004) 20.01.13 19:49
(3)
Ценность этой утилиты поймут те, кому приходилось обновлять УПП с большим количеством правок

Наверное. Специфические задачи порождают специфические решения. Не сталкивался с таким количеством изменений тем более в УПП поэтому не могу судить. Но почему Lua? Вроде VB мог бы тоже справиться и он более распространен.
Я когда-то делал на Lua отчет для торговой программы Агент+ на смартфоне, но даже не знаю, а как без этой программы кто его выполняет - код то не компилируемый.
6. Борис Илов (ilov_boris) 20.01.13 19:59
(5) CaSH_2004, Lua очень простой и в то же время очень мощный язык. Для написания маленьких утилит лучше имхо ничего нет. Работает везде Win, Lin, Mac, Android. К нему есть огромное количество различных библиотек.
Есть хорошая сборка под windows:
http://code.google.com/p/luaforwindows/

Интерпретатор Lua нужно устанавливать, да (есть еще jit-компилятор). Но я думаю что это очень маленькая плата за такие возможности.
Можете кстати посмотреть еще тему на форуме про Lua:
http://oberspace.dyndns.org/index.php/topic,366.0.html
7. Олег Шалимов (CaSH_2004) 20.01.13 20:09
(6)Коротко и ясно - спасибо. Нужно будет подумать, как-то привык на 1С + VBScript, к тому же он встраивается в 1С, интересно, а Lua можно использовать в 1С? Типа: Новый Com...
VB кстати шифруется, но вообще удобно что открытые исходники.
А есть ли аналоги Lua для столь универсальной работы в разных ОС? Да и как можно работать в разных ОС если там разная архитектура? АПИ всякие, функции, и прочее? То что "цикл" или "условие" будут идентичны то понятно, но в остальном то смысл пропадает. Преимущества только в том что работаешь с одним языком, но это тоже немаловажно. Хотя я не представляю себе программиста который вынужден работать и там и там, это редкие спецы, проще все же найти область где работа с одной ОС, а то они же еще и меняются, то что работало вчера не работает сегодня, а если ОС 2 или 3 то вообще вешаться можно
8. Борис Илов (ilov_boris) 20.01.13 20:13
Для 1С77 народ делал компоненту для интеграции с Lua:
http://code.google.com/p/v7lua/

У меня в планах сделать то же самое для 1С8. Пока просто времени на это нет.
9. Борис Илов (ilov_boris) 20.01.13 20:17
"АПИ всякие, функции, и прочее"
(7) CaSH_2004, если хочется независимый скрипт, то конечно и библиотеки нужно выбирать кроссплатформенные. От этого никуда не денешься :)
10. Олег Шалимов (CaSH_2004) 20.01.13 20:26
(8)Занятная штука, сколько изучал ВК ни разу не сталкивался - спасибо, для коллекции качну, хотя практической надобности пока не вижу. А есть примеры чего народ натворил использую эту ВК?
(9)И я про то же.
11. Борис Илов (ilov_boris) 20.01.13 20:35
"А есть примеры чего народ натворил использую эту ВК?"
(10) CaSH_2004, я в нее особо не вникал так как работаю только с 1С8. Я только проверил что она работает и успокоился :)

А примеры использования... Ну например к Lua есть библиотека LuaInterface. Она позволяет использовать в скриптах библиотеки .NET

Если установите Lua for windows по ссылке, которую я давал, то можете посмотреть примеры:
c:\Program Files (x86)\Lua\5.1\examples\LuaInterface\
Примеры запускаются двойным щелчком на скрипте.
12. Борис Илов (ilov_boris) 20.01.13 20:38
Еще есть например библиотека LPEG от автора Lua. Это вроде регулярных выражений, только проще и мощнее.
13. Алексей Т. (CratosX) 10.08.13 22:57
Пользуюсь Total Commander. Выделяю 2 файла, в меню Файл - сравнить по содержимому (Ctrl+F)
Прикрепленные файлы:
14. Игорь Фрунзэ (gorodok11) 18.10.13 17:21
(13) CratosX, Аналогично. Для 3-х и более версий пользуюсь Notepad++ с примочкой Compare.
15. Борис Илов (ilov_boris) 18.10.13 22:34
(13) CratosX, рад за вас. Только к чему вы это поведали?
16. Алексей Т. (CratosX) 18.10.13 23:09
(15) ilov_boris, не увидел цельной последовательности действий, которые приведут к лучшему результату (скорость или качество обновления). Можете его ещё раз озвучить?
17. Борис Илов (ilov_boris) 19.10.13 20:00
(16) CratosX, сложно увидеть в статье то, что она не описывает. Это просто отчет о сравнении. Альтернативный отчет, который более нагляден в некоторых моментах чем стандартный.
18. Алексей Т. (CratosX) 20.10.13 01:05
(17) ilov_boris, ах да, так вот к чему я в (13) - это ещё один альтернативный способ. Только и всего
19. Борис Илов (ilov_boris) 20.10.13 01:44
(18) CratosX, в самом начале статьи написано:
"Кроме того скрипт позволяет просто отсортировать файлы, чтобы затем сравнить их вашей любимой утилитой сравнения (например WinMerge)"

Вместо WinMerge хоть Total Commander, хоть любая другая утилита.