Розбір INI файлів
Розбір INI файлів
На закінчення розділу розглянемо завдання з використанням регулярок. Уявіть, що ми пишемо програму, яка збирає відомості про наших ворогів через інтернет в автоматичному режимі. (Всю програму писати не будемо, тільки ту частину, яка читає файл із налаштуваннями. Вибачте.) Файл виглядає так:
Точний формат файлу (який досить широко використовується і зазвичай називається INI), наступний:
• Порожні рядки та рядки, що починаються з крапки з комою, ігноруються.
• Рядки, укладені у квадратні дужки, починають нову секцію.
• Рядки, що містять алфавітно-цифровий ідентифікатор, за яким слідує = , додають налаштування в даній секції.
• Решта – неправильні дані.
Наше завдання – перетворити такий рядок на масив об'єктів, кожен із властивістю name та масивом налаштувань. Для кожної секції потрібен один об'єкт, і ще один – для глобальних налаштувань зверху файлу.
Оскільки файл треба розбирати рядково, добре почати з розбиття файлу на рядки. Для цього у розділі 6 ми використовували string.split("n"). Деякі операційки використовують для перекладу рядка не один символ n, а два rn . Оскільки метод split приймає регулярки як аргумент, ми можемо ділити лінії з допомогою виразу /r?n/ , що дозволяє і одиночні n і rn між рядками.
function parseINI(string) // Почнемо з об'єкта, що містить налаштування верхнього рівня var currentSection = ; var categories = [currentSection]; string.split(/r?n/).forEach(function(line) var match; if (/^s*(;.*)?$/.test(line)) return; >> else if (match = line.match(/^[(.*)]$/)) currentSection = ; categories.push(currentSection); > (/^(w+)=(.*)$/)) currentSection.fields.push( value: match[2]>); > else throw new Error("Рядок '" + line + "' містить невірні дані."); > >); return categories; >