powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Паттерн проектирования для парсинга
8 сообщений из 8, страница 1 из 1
Паттерн проектирования для парсинга
    #34944287
Mr.Zlatko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть строка :
Код: plaintext
EV_1:param_1:param_2:..:param_n~EV_2:param_1:param_2:..:param_n~...~EV_N:param_1:param_2:..:param_n~

Парсаю ее по-простому, с помошью стринговой функции spіlt() , а также оперторов switch-case . После парсинга прямо в ветви сase выполняю реакцию та соовествующий EV .

Теперь вопрос: нужно ли для такой, относительно не сложной, задачи использовать какойто стандартный паттерн проектирования, и если да то какой ? Просто сейчас у меня стоит задача придумать юнит тест к етому делу, а у меня парсинг и реакция на собитие все в одной функции...
...
Рейтинг: 0 / 0
Паттерн проектирования для парсинга
    #34944366
Alex_soldier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А среда какая?
Для Дельфи у меня есть библиотека подпрограмм, которая обрабатывает строки параметров схожего вида:
можно сразу выдрать параметр по номеру, значению, позиции, привести к нужному типу...

---
Идеи движут Мир!
...
Рейтинг: 0 / 0
Паттерн проектирования для парсинга
    #34944367
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создать класс, имеющий как минимум 2 метода
Код: plaintext
1.
Parse() //парсинг
ToDo() //действие
...
Рейтинг: 0 / 0
Паттерн проектирования для парсинга
    #34944444
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам надо сначала определиться, что вы от этого парсера хотите. Если делать по-уму, то всю строку надо разбирать в абстрактное синтаксическое дерево и уже с ним работать (читайте про Visitor ). Но для такой задачи это может быть и из пушки по воробьям.
...
Рейтинг: 0 / 0
Паттерн проектирования для парсинга
    #34944587
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы содрал модель с SAX
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
interface IParseEventHandler{
       void onEvent(...parameters...);
}
class Parser{
    IParseEventHandler handler;
    void Parse();
    void new(IParseEventHandler handler){
           this.handler = handler;
    }
}
class EventRecorder implements IParseEventHandler{
     void onEvent(...parameters...){
           //запись информации, например в строку или подсчет количества событий или еще что
     }
}
class ParserTest : 
{
     Parser parset;
     EventRecorder recorder;
     void setUp(){
          recorder = new EventRecorder();
          parser = new Parser(recorder);
     } 
     void testEvents()
     {
           parser.parse('TestString.....');
           assertEquals(recorder.eventNumber(),  124 );
     }
}
...
Рейтинг: 0 / 0
Паттерн проектирования для парсинга
    #34945190
Mr.Zlatko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Alex_soldier
Среда FlexBuilder, язык ActionScript 3.0.

2 Naf
У меня уже есть клас который имеет метод parse() , если добавить метод todo() это сути по-моему не поменяет, switch - case просто будет в другом методе...

2 Нахлобуч
Спасибо за линк! Меня очень смущает мой код, поетому хотелось бы найти золотую середину...ну чтобы не совсем из пушки...а хотя бы из ружья ;)

2 belugin
Спасибо за код! Извините за наглость, но можна хоть два слова текстом, а то кроме ParseTest , практически ничего не понял...
...
Рейтинг: 0 / 0
Паттерн проектирования для парсинга
    #34945715
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите как устроен SAX .

назначение Парзера преобразовывать строку (или файл или поток) в поток событий. При разборе строки когда он обнаруживает какие-то жлементы ее структуры он дергает методы переданного ему класса обработчика. Класс-обработчик уже выспринимает события и выпоняет действия по ним. Классы обработчиков обязаны иметь некий общий интерфейс. Например в случае SAX они получают события: началоЭлемента, конецЭлемента и пр.

Для тестирования можно сделать обработчк, который записывает полученные события внутри себя в строку и потом сравнивать с эталоном эту строку
...
Рейтинг: 0 / 0
Паттерн проектирования для парсинга
    #34945819
Mr.Zlatko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок. Спасибо ! Буду думать..
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Паттерн проектирования для парсинга
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]