Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Паттерн проектирования для парсинга / 8 сообщений из 8, страница 1 из 1
16.11.2007, 11:50
    #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
16.11.2007, 12:03
    #34944366
Alex_soldier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн проектирования для парсинга
А среда какая?
Для Дельфи у меня есть библиотека подпрограмм, которая обрабатывает строки параметров схожего вида:
можно сразу выдрать параметр по номеру, значению, позиции, привести к нужному типу...

---
Идеи движут Мир!
...
Рейтинг: 0 / 0
16.11.2007, 12:03
    #34944367
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн проектирования для парсинга
Создать класс, имеющий как минимум 2 метода
Код: plaintext
1.
Parse() //парсинг
ToDo() //действие
...
Рейтинг: 0 / 0
16.11.2007, 12:13
    #34944444
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн проектирования для парсинга
Вам надо сначала определиться, что вы от этого парсера хотите. Если делать по-уму, то всю строку надо разбирать в абстрактное синтаксическое дерево и уже с ним работать (читайте про Visitor ). Но для такой задачи это может быть и из пушки по воробьям.
...
Рейтинг: 0 / 0
16.11.2007, 12:39
    #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
16.11.2007, 14:40
    #34945190
Mr.Zlatko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн проектирования для парсинга
2 Alex_soldier
Среда FlexBuilder, язык ActionScript 3.0.

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

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

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

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

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


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