Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 352
Благодарности: 193

Профиль | Отправить PM | Цитировать


inco1, Код нужно усовершенствовать, ибо он дико неоптимален (сам язык в основе скуден, а комплектные библиотеки (nsh) по этой части страшны). Громоздкость хорошо заметается под макросы и прячется в отдельные библиотечки.

Батник корректно работающим можно назвать только в двух случаях:
1. добавляемых строк в файле нет;
2. строки уже были добавлены в формате, жёстко заданном батником (скорее всего самим же батником ранее).

В остальных случаях он будет плодить мусор в виде дублирующихся неработающих записей.

Основных проблем тут две.

Первая - простая техническая.
Добыть данные из файла. Обработать. Запихнуть обратно. В процессе ничего не сломать.
И чтобы код можно было понимать и поддерживать спустя полгода.

Правильная работа начинается с правильной обработки строк, а каждая строка-запись в максимуме может содержать IP-адрес, энное количество хостов и комментарий с пробелами или табуляциями в качестве разделителей. Обычные прелести минимально структурированного простого текста. Разбор всего этого в NSIS растянется на сотни строк, это не питон какой-нибудь, где строку можно распарсить одной регуляркой.
Строки могут записаны
так
Код: Выделить весь код
0.0.0.0 martau.com #site1
      0.0.0.0  www.martau.com  #site2
0.0.0.0            total-uninstall.com
или так
Код: Выделить весь код
0.0.0.0 martau.com  www.martau.com total-uninstall.com
или даже так
Код: Выделить весь код
                0.0.0.0   martau.com www.martau.com www.total-uninstall.com # block total-uninstall.com


По хорошему надо вытаскивать все данные в некую структуру (список/массив), анализировать и потом записывать обратно.
И помнить про обработку ошибок - мало дать команду на запись, надо ещё убедится, что изменения реально записаны.

Вторая проблема - посложнее.
КАК реализовать техническую часть, чтобы всё работало, чтобы ничего не сломать пользователю, чтобы была возможность отката своих изменений.

Рабочий пример с в меру гибкой обработкой hosts file есть по ссылке. То, что под капотом (hostsblock.nsh), местами корявое, местами страшное, но рабочее с большего. Со стороны основного скрипта одна команда с всего двымя параметрами - имя файла и хост.
В примере присутствует !define DEBUG - это нужно только для отладки, если что-то вдруг пойдёт не так.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:51, 05-03-2023 | #2667