Статьи

Парсинг даних з використанням регулярних виразів

Для Win2000 - Windows 10 (2016) (Server, x86, x64). Остання версія: 4.4.1 build 620. 20 червня 2019.

завдання:

У мене є обладнання, яке передає послідовні дані в термінальну програму (приклад даних наведено нижче). Потрібно витягти значення з певних позицій (позначені червоним). Блоки даних виділені зеленим. Чи можна це зробити за допомогою вашої програми? Також, хотілося б передавати виділені дані в Excel.

Також, хотілося б передавати виділені дані в Excel

Рис.1. послідовні дані

вимоги:

  • Advanced Serial Data Logger (ASDL) Professional або пробна версія;
  • Модуль запиту і аналізу ASCII даних (ASCII data parser and query) для Логгер;
  • DDE server plug-in for Advanced Serial Data Logger (optional);
  • Local database plug-in for Advanced Serial Data Logger.

Мається на увазі що:

Ви налаштували параметри зв'язку з пристроєм (швидкість, кількість біт даних, контроль передачі і т.п.) в Логгер і можете приймати дані без будь-яких помилок.

Рішення:

Зображення вище демонструє, що потік даних містить нецензурні символи (квадратики на зображенні). Тому на зображенні не видно символів закінчення пакета даних. Необхідно визначити ці символи для кожного пакету даних. Необхідно включити висновок недрукованих символів у вигляді їх коду. Для цього налаштуємо наступні опції.

Для цього налаштуємо наступні опції

Рис.2. Установ даних

Потім необхідно включити опцію "Перенесення слів" (рис.3), оскільки блок даних дуже великий і не вміститься в вікні програми. Ви можете відкрити діалогове вікно нижче, використовуючи пункт головного меню програми "Опції - Опції програми".

Рис.3. Налаштування вигляду вікна Логгер

Потім клацніть на кнопці "OK", для того, щоб зберегти зміни і спробуйте прийняти даних з порту. Ви повинні отримати дані види, як показано нижче.

Ви повинні отримати дані види, як показано нижче

Рис.4. Логгер даних. Прийняті дані.

Це інший вид прийнятих даних. Зверніть увагу, що всі недруковані символи були замінені на їх код виду # 1B. Подивитися на зображення вище, стає очевидним, що блок даних (в зелених дужках) починається з ": sr # 1B" і закінчується # 0A # 0D # 0A (підкреслено червоним). У цьому прикладі, блок даних складається з декількох частин. Всі частини були розділені по ширині екрану, проте всі ці частини потрібно інтерпретувати як єдине ціле.

Тепер ми готові до налаштування модулів. Перш за все, будь ласка, виберіть модуль "ASCII data parser and query" (рис.5а, поз.1) зі списку. Потім, включите аналіз і експорт для прийнятих даних (рис. 5a, поз. 2). Модуль "DDE server" (ріс.5b, поз.3) допоможе нам перевірити, що парсер правильно розбирає пакет даних. Модуль "Local database" буде експортувати дані в XLS файл формату Microsoft Excel.

Модуль Local database буде експортувати дані в XLS файл формату Microsoft Excel

Ріс.5a. Логгер даних. Вибір і активація парсеру.

Вибір і активація парсеру

Ріс.5b. Логгер даних. Налаштування експорту.

Зараз, будь ласка, відкрийте вікно настройки модуля "ASCII parser and query" (клікніть на кнопці "Налаштувати" поруч з списком, що випадає рис.5а, поз.1). Вікно настройки з'явиться на екрані (рис.6).

Рис.6. Логгер даних. Налаштування парсеру.

Процес настройки повинен бути простим, якщо попередньо було з'ясовано формат даних в головному вікні Логгер даних (рис.4). Ви повинні ввести дані в тому ж вигляді, що і в головному вікні програми в полях 1 і 2. Поле №1 задає початок блоку даних, а поле №2 задає його закінчення. Ви повинні ввести значення з рис. 4, підкреслені зеленим.

Оскільки потік даних може містити пакети даних, які нам не потрібно експортувати, то ми додали два правила фільтрації, що характеризують ці пакети даних (рис.7). Ви можете додати нові правила, клікнувши на кнопці "Додати". У нашому випадку ми виключаємо всі пакети, що містять слова "Data" або "data" (реєстр символів враховується в поле "Вираз").

Рис.7. Логгер даних. Правила фільтра.

Наступна закладка є дуже важливою частиною конфігурації (рис.8). Парсер використовує ці дані для того, щоб виділити змінні з пакета даних. Наш пакет даних містить кілька елементів, названі як Date 1 - Date 12, які повинні бути поміщені в різні змінні. Далі ці змінні будуть використовуватися в модулях фільтрації і експорту даних. У нашому прикладі значення цих змінних будуть записуватися в різні колонки файлу Microsoft Excel.

У нашому прикладі значення цих змінних будуть записуватися в різні колонки файлу Microsoft Excel

Рис.8. Логгер даних. Змінні парсеру.

Щоб додати нову змінну парсеру необхідно клікнути на кнопку "Додати" (рис.8, поз.7). Перед додаванням змінної програма попросить ввести опис змінної. Ви можете ввести будь-який опис, яке допоможе вам запам'ятати вміст цієї змінної. Ми додали все 12 змінних з іменами Date 1 - Date 12 з відповідними описами на рис.8

Кожна змінна парсеру має кілька властивостей:

  1. Ім'я змінної - це ім'я буде пов'язано з колонкою в модулі експорту даних. Це ім'я має складатися тільки з латинських букв і цифр;
  2. Тип обробки даних - це метод, який програма буде використовувати для виділення даних з пакета даних. Парсер підтримує кілька методів, від найбільш простого способу, до самого універсального і потужного. У нашому випадку, коли всі дані розташовуються в випадкової позиції, ми повинні використовувати найбільш універсальний метод "Регулярні вирази". Цей метод дозволяє отримати будь-яку кількість символів, відповідних зазначеної масці (регулярному виразу);
  3. Тип даних - тип даних змінної. Якщо ви вкажете тип даних, відмінний від типу даних "STRING", то модуль буде пробувати конвертувати рядок у зазначений тип даних. Модуль дозволяє визначити деякі опції, які будуть використовуватися для перетворення (див. Закладку "Формат даних");
  4. Значення за замовчуванням - це значення буде використовуватися, коли дані не можуть бути вилучені з вказаної позиції і перетворені в зазначений тип даних;
  5. Регулярний вираз - це маска для пошуку тексту в пакеті даних. У цьому прикладі нам необхідно виділити текст, який йде після символів # 1B [XX; XXH, де XX може бути одне або два числа. Тому ми повинні вказати наступне регулярний вираз: \ [\ d + \; \ d + H [\ \ +] + ([\ d \.] +). Тут \ d + означає одне або декілька чисел. Вираз в дужках повинно містити маску, що відповідає значенню, яке ми повинні витягти. Більш детальний опис синтаксису регулярних вираз можна подивитися у файлі довідки або пошукати в Інтернеті за ключовими словами "perl regex";
  6. Номер входження - тут вказується номер збіги в пакеті даних. Якщо в пакеті даних зазначеної масці відповідають кілька значень, то тут вказується порядковий номер цього значення. Мінімальним значенням є 1.

Всі змінні мають ідентичні параметри, за винятком номера входження.

На наступній закладці (рис.9) ви можете визначити основні опції форматування і перетворення значень. Оскільки ми вибрали тип даних "String" для обох змінних, тому перші дві опції дозволяють видаляти прогалини на початку і кінці значення.

Оскільки ми вибрали тип даних String для обох змінних, тому перші дві опції дозволяють видаляти прогалини на початку і кінці значення

Рис.9. Логгер даних. Опції форматування.

Інші опції не потрібні в нашому випадку, оскільки у нас немає змінних з іншими типами даних.

Будь ласка, клікніть на кнопці "OK" у вікні налаштування парсеру і потім на кнопці "OK" у вікні налаштування конфігурації.

Тепер наш парсер налаштований і прийшов час перевірити його. Підключіть ваш пристрій або включите його, якщо це необхідно. Спробуйте прийняти пакет даних від пристрою. Якщо парсер був вірно налаштований, то у вікні DDE сервера будуть відображені наші змінні і їх значення (рис.10).

Рис.10. Логгер даних. Вікно DDE сервера.

Тепер всі змінні парсеру готові для експорту в Excel. Як це зробити, описано в другій частині .

Супутні статті:

Чи можна це зробити за допомогою вашої програми?

Новости