Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 4

Написать интерфейс "Парсер" с методом парсинга (разбора) файлов

11.01.2017, 17:21. Показов 3064. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с заданием

Написать интерфейс "Парсер" с методом парсинга (разбора) файлов parse(std::string filename). Написать два класса, реализующие данный интерфейс: "XML-парсер" и "MIDI-парсер". В первом случае необходимо считать все строки из текстового файла и вывести их количество на консоль; во втором случае – просто вывести на консоль длину полного имени файла (параметра метода). Если указываемого файла не существует, бросать исключение. Продемонстрировать перехват исключения и полиморфизм в главной функции.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2017, 17:21
Ответы с готовыми решениями:

Проверка написанного батника разбора файлов
Приветствую всех. Необходима помощь в проверки написанного кода, а точнее что в данном коде написано не так. Данный батник...

Реализация парсинга XML файлов
Здравствуйте! Мне нужно с XML фала вытащить ссылку с тега <DownloadURL></DownloadURL> . Вот пример кода <UpdateData...

Начинка DomDocument и алгоритмы парсинга файлов
Здравствуйте, есть класс http://php.net/manual/ru/class.domdocument.php 1) Где можно почитать, как реализованы алгоритмы парсинга html...

3
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
11.01.2017, 18:14
Лучший ответ Сообщение было отмечено Svetlana2211 как решение

Решение

C++
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <string>
#include <fstream>
#include <exception>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Parser {
    public:
        virtual void parse(string filename)const =0;
        virtual ~Parser() {}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Xml_parser:public Parser {
    public:
        Xml_parser()=default;
        Xml_parser(const Xml_parser& p)=delete;
        Xml_parser& operator=(const Xml_parser& p)=delete;
        ~Xml_parser() {}
        void parse(string)const override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class MIDI_parser:public Parser {
    public:
        MIDI_parser()=default;
        MIDI_parser(const MIDI_parser& p)=delete;
        MIDI_parser& operator=(const MIDI_parser& p)=delete;
        ~MIDI_parser() {}
        void parse(string)const override;
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Xml_parser::parse(string filename)const {
    ifstream ff(filename.c_str());
    string s1 {};
    int c=0;
    while(getline(ff,s1))c++;
    cout<<c<<endl;
}
void MIDI_parser::parse(string filename)const {
    ifstream ff(filename.c_str());
    if(ff) {
        cout<<filename.length()<<endl;
    } else {
        throw exception();
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
    Xml_parser p;
    p.parse("tr.txt");
    cout<<endl;
    MIDI_parser mi;
    try {
        mi.parse("tt.txt");
    } catch(exception &e) {
        cout<<e.what()<<endl;
    }
    return 0;
}
Добавлено через 19 минут
Если исключение в классе
C++
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string>
#include <fstream>
#include <exception>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Parser {
    public:
        virtual void parse(string filename)const =0;
        virtual ~Parser() {}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Xml_parser final:public Parser {
    public:
        Xml_parser()=default;
        Xml_parser(const Xml_parser& p)=delete;
        Xml_parser& operator=(const Xml_parser& p)=delete;
        ~Xml_parser() {}
        void parse(string)const override;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class MIDI_parser final :public Parser {
    public:
        MIDI_parser()=default;
        MIDI_parser(const MIDI_parser& p)=delete;
        MIDI_parser& operator=(const MIDI_parser& p)=delete;
        ~MIDI_parser() {}
        class Parse_exp final:public exception {
            public:
                Parse_exp()=default;
                virtual ~Parse_exp () throw () {}
                const char *what() const throw() {
                    return " exception parser: wrong namefile, file does not exist";
                }
        };
        void parse(string)const override;
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Xml_parser::parse(string filename)const {
    ifstream ff(filename.c_str());
    string s1 {};
    int c=0;
    while(getline(ff,s1))c++;
    cout<<c<<endl;
}
void MIDI_parser::parse(string filename)const {
    ifstream ff(filename.c_str());
    if(ff) {
        cout<<filename.length()<<endl;
    } else {
        throw Parse_exp();
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() {
    Xml_parser p;
    p.parse("tr.txt");
    MIDI_parser mi;
    try {
        mi.parse("tt.txt");
    } catch(MIDI_parser::Parse_exp &e) {
        cout<<e.what()<<endl;
    }
    return 0;
}
2
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 4
12.01.2017, 17:28  [ТС]
Огромное спасибо
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
12.01.2017, 17:35
Хочу заметить, что использование using namespace ... в заголовочных файлах - не хорошая практика.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2017, 17:35
Помогаю со студенческими работами здесь

Разработать программу для парсинга файлов
Разработать программу для парсинга файлов, в соответствии с вариантом. В результате получить таблицу с именем узла и данными о памяти ПК.

Парсер + работа с БД + серьезная аналитика + графические отчеты + веб интерфейс
Здравствуйте! Задача: 1. Заходить на сайты с нужными мне БД (количество от 1-2 до 1-2 десятков), на страницы с многостраничным...

Посоветуйте библиотеки для парсинга json файлов
Я пишу свою игру, попытался написать сначала свой парсер json, потом попытался написать упрощенную версию json'а, потом сделал какой-то...

Noile Bechmark 1.2 (бенчмарк парсинга файлов) - тестируем!
Добрый день! Бенчмарк измеряет скорость парсинга текстовых файлов в однопоточном и многопоточном режимах. Изменения в версии 1.2:...

Программа, считывающая диапазон и выдающая «OK» в случае успешного разбора или «FAIL» в случае неуспешного разбора
Здравствуйте! Недавно начал изучать Visual C++ и пока не получается сделать программу, а очень надо. Вот задание. Написать программу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru