Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
lixod96
1 / 1 / 3
Регистрация: 18.04.2014
Сообщений: 118
1

Использование принципов ООП для поиска в файлах разного типа

06.12.2014, 17:19. Просмотров 500. Ответов 4
Метки нет (Все метки)

Хотя бы намекните с чего начать. Может у кого то было подобное.


Исходные данные

Каталоги с файлами разных типов (.txt, .xml, и html и другие).

Задание

1. Написать программу, которая будет осуществлять поиск введенного слова или фразы во всех файлах каталога (с возможностью сканирования подкаталогов) и выводить результаты поиска.

Формат вывода результата:

название файла;
полный путь к файлу;
номер строки;
фраза или предложение с искомым словом или фразой:
для .txt - предложение, в котором встретилось слово;
для .xml - название объекта, в котором встретилось слово;
для .html - 3 слова слева и справа от найденного...., без тегов;
для других на выбор разработчика.

2. В программе обязательно должна использовать такие принципы и механизмы ООП как:

инкапсуляция;
наследование;
полиморфизм;
абстрактные классы;
вложение классы.
3. Входные параметры ( слово или фраза для поиска, [начальный каталог], [флаг о сканировании подкаталогов], [форматы допустимых файлов] , [имя файла для вывода результатов]
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2014, 17:19
Ответы с готовыми решениями:

Применение принципов ООП на практике (мнение о приведенном коде)
для ленивых: 1й абзац можно пропустить ) В силу обстоятельств я начал...

Создать функцию prompt и перегрузить её для параметра разного типа
Создайте функцию prompt( ) для выдачи подсказки пользователю и ожидания ввода...

Программа для поиска введенного слова или фразы во всех файлах каталога
Тема: Использование принципов ООП для поиска в файлах разного типа Исходные...

Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур
Сабж. Нужен способ помещения разного рода типа данных в контейнеры типа...

написание программы для поиска и замены части строк в двух текстовых файлах с разным синтаксисом
Здравствуйте! Последний раз программировал около 5 лет назад, на первых курсах...

4
Renji
2152 / 1585 / 480
Регистрация: 05.06.2014
Сообщений: 4,607
06.12.2014, 17:28 2
2. В программе обязательно должна использовать такие принципы и механизмы ООП как:
Просто "чтоб було", без оглядки на осмысленность?
C++
1
2
3
4
5
6
7
8
struct file
{
    const std::string path;
    file(const std::string&path_):path(path_){}
    virtual~file(){}
    virtual void scan(const std::string&key)const=0;
};
typedef std::vector<std::unique_ptr<file> >file_list;
Далее для каждого типа файлов делаем отдельного потомка file реализующего свою версию scan. Содержимое каталога представляем как набор ссылок на объекты типа file (класс file_list). Поиск ключевого слова осуществляем вызовом метода scan этих объектов.
0
lixod96
1 / 1 / 3
Регистрация: 18.04.2014
Сообщений: 118
08.12.2014, 07:16  [ТС] 3
Можна дополнить этот код, чтобы соответствовал условию??? Или он не подходит???

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    string text = ""; // текст записанный из файла
    string search;    // искомое слово
    string result;    // результат поиска
    string filename = "1.txt"; // имя файла
 
    // файл в котором будет осуществляться поиск
    ifstream *in = new ifstream(filename.c_str());
    if(in->fail())
    {
        cout << "file '" << filename << "' not found" << endl << endl;
        system("pause");
        return 1;
    }
 
    // пользователь вводит искомое слово
    cout << "enter search  word in proposal: ";
    cin  >> search;
    cout << "-------------------------------------" << endl;
 
    // записываю содержимое файла
    if(in->is_open())
    {
        while(!in->eof())
            text += in->get();
 
        in->close();
    }
    delete in;
    
    while(1)
    {
        int begining_pos = text.find(search); // ночало строки
        int crt_pos;                          // текущая позиция
 
        crt_pos = text.find(search); // ищу позицию искомого слова
        if(crt_pos == -1) break;     // если предложений с таким словом нет, 
                                     // то выхожу из цикла
 
        // ищу начало строки
        for(int i = crt_pos; ; i--)
        {
            if( text[i] != '!' && text[i] != '.' && 
                text[i] != '?' && i != 0) 
                begining_pos--;
            else 
            { 
                crt_pos = i;
                if(crt_pos > 0) begining_pos++; // ночало строки
                break; 
            }
        }
        // записываю строку
        for(crt_pos = begining_pos; ; crt_pos++)
        {
            if( text[crt_pos] == '!' || text[crt_pos] == '.' || 
                text[crt_pos] == '?' || (int)text[crt_pos] == -1)
            {
                result += text[crt_pos];
                break;
            }
 
            if(crt_pos == begining_pos && text[crt_pos] == ' ') continue;
            result += text[crt_pos]; // записал строку в 'result'
        }
 
        // вывожу результат
        cout << result << endl << endl;
 
        text.erase(begining_pos, crt_pos + 1); // удаляю из текста найденую строку
        result = ""; // очищаю результат
    }
 
    system("pause");
    return 0;
}
0
Renji
2152 / 1585 / 480
Регистрация: 05.06.2014
Сообщений: 4,607
08.12.2014, 11:45 4
Ну а минимально погуглить чтоб разобраться в уже предложенной болванке кода?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct scan_file
{
    const std::string path;
    scan_file(const std::string&path_):path(path_){}
    virtual~scan_file(){}
    virtual void scan(const std::string&key)const=0;
};
struct scan_txt:scan_file
{
    scan_txt(const std::string&path):scan_file(path){}
    void scan(const std::string&key)const;
};
void scan_txt::scan(const std::string&key)const
{
    перенести код поиска в txt файле сюды. Путь к файлу уже лежит в path. Образец для поиска в key
}
int main()
{
    scan_file*scan_object=new scan_txt("1.txt");
    scan_object->scan("Что ищешь ты в краю далеком, что кинул ты в краю родном?");
    delete scan_object;
    return 0;
}
0
lixod96
1 / 1 / 3
Регистрация: 18.04.2014
Сообщений: 118
15.12.2014, 17:16  [ТС] 5
Программисты, нужно срочно сдавать работу, выручите студента, пожайлуста.
0
15.12.2014, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2014, 17:16

Массив: Использование алгоритмов сортировки для массивов, входные данные и результаты в файлах
Здравствуйте! помогите пожалуйста с задачей: Использование алгоритмов...

Присвоение переменных разного типа
Использую я значит вот такую строку, пытаясь получить возвращаемые данные char...

Сортировка массивов разного типа
Само задание: Массив данных заполняется случайным образом. Рассмотреть массивы...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru