Поиск

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Для успешной публикации статей с помощью современных систем управления сайтом знания html, как правило, не требуется.

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

Совсем недавно пришлось редактировать языковой файл Joomla.

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



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



Часть 1. Поиск с помощью «синтакисиса»

Сначала я попытался найти строки, используя подсветку в редакторе Notepad++. Вкладка «Синтаксисы» — выбирайте что нравится. Например, подсветка AutoIt частично справляется с задачей:

Подсветка ini файла с помощью синтаксиса AutoIt

Но не совсем. Визуально не видно, если нет завершающей кавычки, две кавычки или какой-то символ вынесен за завершающую кавычку.

В общем, не фонтан, можно искать долго и нудно.



Часть 2. Поиск с помощью регулярки на сервере

В общем, по-простому быстро не получилось, облом.

Тогда я вспомнил, что «яжпрограммист» и буквально за 10 минут написал небольшой PHP-скрипт, который тупо по регулярному выражению перебирает все строки, запоминает «нестандарт» и выводит подозрительное в удобном виде с указанием строки:
Код: 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) остались непомеченными

Теперь мой внутренний перфекционист удовлетворен и я могу использовать этот опыт в будущем.



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

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

Вы не залогинены!

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