РазделыСтатьиРазработка сайтов → Поиск неправильных строк в ini файлах

Совсем недавно пришлось редактировать языковой файл Joomla.
В файле было более 1000 строк, поэтому пришлось использовать Гугл-переводчик, после чего файл «поломался».

В частности, Гугл-переводчик во многих местах сделал подмену по своему усмотрению двойные кавычки (") на ёлочки (» или «), наставил пробелов, вынес точки за кавычки. Найти такие строчки в 1000+ строковом файле не совсем тривиальная задача.

Часть 1. Поиск с помощью «синтакисиса»
Сначала я попытался найти строки, используя подсветку в редакторе Notepad++. Вкладка «Синтаксисы» — выбирайте что нравится. Например, подсветка AutoIt частично справляется с задачей:
Подсветка ini файла с помощью синтаксиса AutoIt
Но не совсем. Визуально не видно, если нет завершающей кавычки, две кавычки или какой-то символ вынесен за завершающую кавычку.
В общем, не фонтан, можно искать долго и нудно.

Часть 2. Поиск с помощью регулярки на сервере
В общем, по-простому быстро не получилось, облом.
Тогда я вспомнил, что «яжпрограммист» и буквально за 10 минут написал небольшой PHP-скрипт, который тупо по регулярному выражению перебирает все строки, запоминает «нестандарт» и выводит подозрительное в удобном виде с указанием строки:
Код: PHP

$f=file('config/config.ini');

$fail = array();
foreach(
$f as $k=>$v){
$arr=preg_split("/^[\s]*(.*?)[\s]*[=][\s]*(\"|)(.*?)(\"|)[\s]*$/",$v);
if (
$arr[0]==$v$fail[$k]=$v;
unset(
$arr);
};
print_r($fail);
Результат действия магии, отображенный в PHP-консоли:
Поиск неправильных строк в ini файле с помощью PHP

Небольшое отступление.
Если вам, как и мне, иногда хочется исполнять код прямо на сервере, то вот ссылка на мой инструмент: https://git...Filemanager
Это файловый менеджер, которым я пользуюсь.
Самое главное из того, что он может:
1. Просматривать и управлять файлами на сервере.
2. Консоль для выполнения команд — на PHP и на MySQL
3. Прокси
Это конечно кратко и не всё. Он также содержит настройки , может сохранять логин/пароль, шаблоны для консоли и т.д. и т.п. — и это всё в одном файле. Подробнее о истории разработки файл-менеджера, скриншоты работы скрипта и все его версии можно скачать здесь — https://git...er/releases
В будущем планируется отдельный сайт поддержки. Пока не готов логотип для проекта, обсуждение лого здесь — https://www...ads/287597/

Вернемся к нашим ini файлам.
В конце концов я конечно сделал всё, ошибки нашёл, но «недосказанность» какая-то осталась. Ведь редактор Notepad++ удобнее для поиска «неправильных» строк. Да и не будешь каждый раз поднимать сервер и закачивать туда файлы, сканировать их скриптами и пр.
Вот бы редактор сам показал такие строки! Стоп, так есть же синтаксис регулярных выражений, который работает в Notepad++!

Часть 3. Использование регулярных выражений в Notepad++ как идеальное решение задачи
Регулярка-то у нас уже написана, опробована и работает.
Код:

^[\s]*(.*?)[\s]*[=][\s]*(\"|)(.*?)(\"|)[\s]*$

Забиваем её в строку поиска Notepad++ и переключаем «Режим поиска» на «Регулярное выражение».
Результат: «Найдено 1033 строки».
При файле в 1041 строку ясно, что всё-таки оно сработало!
Но тут есть проблема. Нам нужно найти то, что НЕ СООТВЕТСТВУЕТ этому выражению, а это уже сложнее. К счастью, нам на помощь придёт подсветка кода! На вкладке поиска Notepad++ перейдем на вкладку «Пометки» и нажмем «Пометить все». Вот теперь видны все включения «неправильных строк».
Они остались «белыми»:
Неправильные строки (1-5) остались непомеченными
Теперь мой внутренний перфекционист удовлетворен и я могу использовать этот опыт в будущем.

Ну а вы, дорогие читатели, если есть замечания, можете озвучить их в комментариях. Например, в идеале было бы искать выражения, НЕ СООТВЕТСТВУЮЩИЕ данному. Но как это сделать, я не знаю. Если знаете, подскажите. Добавлю в статью.
27.12.2017 13:23 Автор/источник: Den1xxx

Комментировать

Вы не залогинены! Регистрация

Устал читать? Напиши! Или позвони +375 29 5344286. На связи по будним дням с 800 до 1700.