Сайт | Скачать | Видео | Wiki

Автор Тема: Парсер конфигов  (Прочитано 901 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AZJIO

  • Модератор
  • Старожил
  • ****
  • Сообщений: 293
  • Репутация: +10/-0
  • Автор темы
Парсер конфигов
« : 15 Январь 2021, 22:38:09 »
Послушал тут на счёт конфигов, появилась идея, допустим скопировал дефолтный конфиг после установки, настроил программу, сравнил изменение/добавление параметров, опять же программно - перечисление параметров, разницу сохраняет в файле. Теперь у нас в базе есть путь к конфигу и список параметров, которые в него надо добавить/изменить. Теперь при установке программы не важно на какой системе запускаем программу восстановления настроек и получаем результат не делая это вручную.
На работе пришла эта идея, записал в блокнот и только сейчас прочитал. Единственное можно столкнуться с нестандартностью конфигов, так что планы на следующие выходные опять забиты.

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2538
  • Репутация: +33/-0
Re: Парсер конфигов
« Ответ #1 : 16 Январь 2021, 04:28:45 »
  Имхо - лучше заменять "конфиг-строки целиком", а не значение параметра . У меня на баше был какой-то головняк  для xml-овского синтаксиса ~/.config/rox.sourceforge.net/ROX-Filer/Options.
Но это я тогда пробовал "подставлять" значение параметра, беря его из "тела скрипта" и столкнулся с "чрезмерным закавычиванием" ( до того чтоб брать значения[ а точнее получается строки] из юзер-файла тогда вроде руки так и не дошли )

Да и в некоторых конфигах строки( содержащей параметр) может и не быть [пр.: ~/.icewm/prefoverride, ~/.links/links.cfg, ....]).

# на данное время пользую скрипты, где вставляются "строки" ( т.е. это пока "для себя". строки там беруться из "тела".  юзер-файла и соответственно "диалога" пок нет).

про то, что  "конфиг-строки целиком, а не значение параметра" - может быть и спорно - может нужно и "пересматривать"...
-----
 Замечал по крайней мере на паре конфиг-файлах ( ~/.config/rox.sourceforge.net/ROX-Filer/Options и ~/.icewm/prefoverride) - если конфиг-файл воспринимается самой прогой как ошибочный - прога генерит "дефолтный-конфиг".
( и нет пока соображений "чего делать в этом случае"... - но, имхо, на данный момент некритично  )

Кто-знает - может еще-какие подводные камушки могут повылазить(с учетом того что "структуры конфиг-файлов" разных прог устроены по-разному ).

-------
 На данное время у меня пока представление о "юзкейзе" 'проги/скрипта-для-вставки-строк-в-конфигфайл':
- диалог   выбора целевого-конфиг-файла(к.-либо проги) , затем диалог выбора "юзер-файла со строками настроек пользователя".

  Как например оперировать с "группой(/~ами) конфиг-файлов" (в смысле чтоб "массово") более-менее четкого представления пока нет . Но тут :) "пока не до жиру...".

Это мои размышления если смотреть "со стороны bash~а"
=========
? PB под 'dialog'[ или как-либо еще для диалога-выбора файлов в консоли] вообще впринципе можно( есть ли наработки)? - не единичны линукс-сборки(iso-хи) без Иксов ...
« Последнее редактирование: 16 Январь 2021, 04:46:07 от knn »
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2538
  • Репутация: +33/-0
Re: Парсер конфигов
« Ответ #2 : 16 Январь 2021, 05:09:47 »
, появилась идея, допустим скопировал дефолтный конфиг после установки, настроил программу, сравнил изменение/добавление
имхо - вышеозвученная идея "сравнения дефолтного(/исходного) и "результирующего юзер конфига" после настройки проги - вполне интересна, и вполне полезна как в случае настройки ч/з GUI-проги, так и если конфиг правиться руками.   
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.

Оффлайн AZJIO

  • Модератор
  • Старожил
  • ****
  • Сообщений: 293
  • Репутация: +10/-0
  • Автор темы
Re: Парсер конфигов
« Ответ #3 : 17 Январь 2021, 05:56:13 »
knn
пока идея такова: есть некоторое зеркало папки "/home/пользователь/.config", не важно где, в загрузках "/home/пользователь/Загрузки/config. При запуске проги указал путь к зеркалу. Далее выполняется рекурсивный поиск файлов (т.е. конфигов) берётся относительный путь и проверяется наличие такого же файла в настоящем ".config". Если файл существует, то осуществляется чтение значения всех параметров в зеркале и переносится в оригинал если значение параметра отличается. Чтение может быть как обычным движком "параметр=значение", так и методом регулярных выражений, то есть переносить текст после "=" как есть, без изменения пробелов на концах, удаление/прибавления кавычек и т.д.
Понял что именно сравнение с дефолтным не решает проблему, так как если вычленить разницу с дефолтным, а у человека давно уже не дефолтный конфиг, то мы не сможем встроить все параметры, а только те, которые отличались от дефолтного. Сравнение могло бы уменьшить размер конфигов, но в итоге текстовые файлы в архиве занимают мало места и экономия была бы не большой, а вызванные такой концепцией проблемы большие. Та же сборка IceArch, там Geany не дефолтный и это тот случай когда настройки применяться не так как ожидалось.
И такая система проста в использовании, просто после настройки находим свой конфиг, кидаем в зеркало, и всё, прога сама его найдёт и начнёт проверять с оригиналом.

? PB под 'dialog'[ или как-либо еще для диалога-выбора файлов в консоли] вообще впринципе можно( есть ли наработки)? - не единичны линукс-сборки(iso-хи) без Иксов ...
не понял вопроса. Сделать диалог выбора файлов из консоли с возвратом результата? Или наоборот сделать консольную программу с возможностью выбора файлов? Оба варианта думаю есть. Можно компилировать как консольную программу и в ней вводить пути, хотя я это не пробовал.
« Последнее редактирование: 17 Январь 2021, 06:14:43 от AZJIO »

Оффлайн knn

  • Ветеран
  • *****
  • Сообщений: 2538
  • Репутация: +33/-0
Re: Парсер конфигов
« Ответ #4 : 17 Январь 2021, 08:00:18 »
? PB под 'dialog'[ или как-либо еще для диалога-выбора файлов в консоли] вообще впринципе можно( есть ли наработки)? - не единичны линукс-сборки(iso-хи) без Иксов ...
не понял вопроса. Сделать диалог выбора файлов из консоли с возвратом результата? Или наоборот сделать консольную программу с возможностью выбора файлов? Оба варианта думаю есть. Можно компилировать как консольную программу и в ней вводить пути, хотя я это не пробовал.
- получается подразумевал -
"консольную-прогу например с использованием 'dialog'(его функционала)", или с применением других tty-прог
(вопрос задавал не с к.-либо "точечной целью", а чтоб получить приблизительное представление ширины возможностей)
-----------
как понял "и те, и те" возможности есть... ) ну и вообще что возможностей не мало.
(я знаком только с Бейсиком тем что был тогда на Спектруме .
Потом глухо забросил компютерную тематику. Разве что потом по общей учебной программе доводились какие-то домашние задания в малом количестве.
Из вспомнившегося бейсиковского - тасовал и раздавал колоду карт - до искуственного интелекта дело не дошло   ;D ;D ;D)
« Последнее редактирование: 17 Январь 2021, 08:03:55 от knn »
Gr4D, Grub2; HP Mini 210 VT - Intel Atom N470  @ 1.83GHz, Intel GMA3150, RAM=2 ГБ ;
Sams-n110: N270 - 1,6 ГГц, Intel GMA 950, RAM=2 ГБ.

Оффлайн AZJIO

  • Модератор
  • Старожил
  • ****
  • Сообщений: 293
  • Репутация: +10/-0
  • Автор темы
Re: Парсер конфигов
« Ответ #5 : 17 Январь 2021, 09:50:18 »
Вот набросок на pastebin.com (не компилировал пока).
Закомментировал выбор папки и вставил пока прямые пути, чтобы тестировать, а не выбирать каждый раз папки.
Тестируемые пути:
PathMirror$ = "/home/user/Загрузки/config/"
PathOrig$ = "/home/user/Загрузки/configOrig/"
то есть я взял конфиг Geany и скопировал в обе папки, далее изменил один параметр из папки оригинала "configOrig", запустил код, там я добавил строку отладчика выводить данные если появятся строки отличия значений, о это увидел и вывел мне строку и сделал замену параметра.
На данный момент это первый блин, и я тут же ищу косяки: оригинал UTF-8 без BOM, он мне сохранил UTF-8 с BOM, далее вместо "key=val" все строки стали  "key = val" с пробелами. То есть это встроенная работа движка ini-файла (conf-файла, как угодно), видимо не подразумевается работа с чужими конфигами и задатчиком формата. Поэтому видимо надо делать на регулярных выражениях или делать исправление результата, то есть определять начальный кодировку файла и заменять " = " на "=" если оно встречается первым от начала строки.

Оффлайн AZJIO

  • Модератор
  • Старожил
  • ****
  • Сообщений: 293
  • Репутация: +10/-0
  • Автор темы
Re: Парсер конфигов
« Ответ #6 : 23 Январь 2021, 15:42:50 »
Обновил на пастбине, добавил исправление конфига конкретно geany.conf - UTF8 без BOM. Казалось бы исправил, чтение метки BOM, перезапись файла конфигурации без BOM с заменой " = " на "=", тут же беру второй по значимости конфиг parcellite, а он в ASCII и без расширения файла, т.е. поиск практически любого типа файла, понимая что есть конфиги в XML, JSON. А значит надо прописывать имена файлов и указывать параметры обработки данных под каждый конфиг или делать анализатор файлов, хотя не исключаю смешанные варианты в одном файле.