Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Андрюшатина
28 / 28 / 13
Регистрация: 27.11.2014
Сообщений: 182
#1

Заменить теги в HTML-файле. - C++

23.08.2015, 00:51. Просмотров 497. Ответов 14
Метки нет (Все метки)

Добрый день форумчане, помогите нубу.
Код за меня не прошу писать, ну разве что, у вас завалялся похожий пример.
У меня трудности с пониманием потоков, поэтому даже начать задачу не могу.
Прошу подсказки, с чем в данном случае нужно работать?


Задача: Дан HTML файл. Все цитаты находятся в тегах <strong>. Необходимо заменить данный тег на тег <blockquote> и записать в новый HTML файл.

Я понимаю, что нужно открыть файл, прочесть, задать условие для смены текста, скопировать в новый файл и сохранить. Но как-то всё очень туго.

Спасибо!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2015, 00:51     Заменить теги в HTML-файле.
Посмотрите здесь:

Заменить теги в файле с разметкой - C++
Дано файл, в котором встречаются теги &lt;i&gt; и &lt;/ i&gt;. заменить каждое вхождение &quot;&lt;i&gt;&quot; на &quot;&lt;курсив&gt;&quot;, а каждое вхождение &quot;&lt;/ i&gt;&quot; на &quot;&lt;конец ...

Удалить все теги , кроме тега <a .>.</a> со страницы html. Результат вывести на экран - C++
Здравствуйте , мне нужно выполнить следующее задание : Дан текст HTML-страницы (скачать по ссылке http://its.alnam.ru/kurs_11.txt). ...

Заменить все \n в файле - C++
Нужно заменить все \n в файле на пробелы. Задача вроде несложная, но проблема заключается в том, что \n весит два байта, а пробел - один...

Заменить расположение элементов в файле - C++
Дан файл целых чисел с элементами A1, A2, …, AN (N — количество элементов в файле). Заменить исходное расположение его элементов на...

В файле заменить числа на противоположные - C++
Нужно записать в двоичный фал 20 рандомных вещественных чисел(от -10 до 10) , а потом вывести содержимое файла на экран . Затем заменить...

Заменить в файле указанное число на другое - C++
Нужна программа, которая будет открывать указанный файл (файл не .txt, но можно открыть блокнотом), искать там указанное числовое значение...

Как заменить цифру в бинарном файле? - C++
В программе нужно заменить цифру в бинарном файле. Возникла проблема с функцией замены swap_val. Считывает не цифру, а невесть что, к тому...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ASCII
90 / 62 / 10
Регистрация: 15.12.2013
Сообщений: 399
Завершенные тесты: 2
23.08.2015, 03:32     Заменить теги в HTML-файле. #2
причем тут потоки?
Вам парсер xml нужен.
Поищите libxml2 или как-то так, Cишная библиотека для парсинга xml.
Ну или могу свою дать, давно писал правда, но работает.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
23.08.2015, 04:40     Заменить теги в HTML-файле. #3
Цитата Сообщение от ASCII Посмотреть сообщение
причем тут потоки?
Я вот тоже в недоумении.

Цитата Сообщение от ASCII Посмотреть сообщение
Вам парсер xml нужен.
Не проще ли в данном случае просто заменить одно слово на второе?
ASCII
90 / 62 / 10
Регистрация: 15.12.2013
Сообщений: 399
Завершенные тесты: 2
23.08.2015, 05:09     Заменить теги в HTML-файле. #4
Причем тут простая замена? Таких слов в документе может встречаться много, в том числе и не в тех тегах, в которых надо заменять.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
23.08.2015, 05:20     Заменить теги в HTML-файле. #5
Цитата Сообщение от ASCII Посмотреть сообщение
Причем тут простая замена? Таких слов в документе может встречаться много, в том числе и не в тех тегах, в которых надо заменять.
Много ли там таких <(...)strong(...)> слов? Даже если они есть в тексте скобки экранированы, вырежет только теги.
Enno
266 / 169 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
23.08.2015, 05:55     Заменить теги в HTML-файле. #6
Цитата Сообщение от AncientPenguin Посмотреть сообщение
Даже если они есть в тексте скобки экранированы, вырежет только теги.
Подстрока "<strong>" может быть частью содержимого тега <plaintext>. Так что libxml лучше заюзать.
AncientPenguin
98 / 45 / 18
Регистрация: 09.08.2015
Сообщений: 367
23.08.2015, 06:10     Заменить теги в HTML-файле. #7
Enno, убедили, про такой не знал.
Андрюшатина
28 / 28 / 13
Регистрация: 27.11.2014
Сообщений: 182
23.08.2015, 12:06  [ТС]     Заменить теги в HTML-файле. #8
Цитата Сообщение от ASCII Посмотреть сообщение
Причем тут простая замена? Таких слов в документе может встречаться много, в том числе и не в тех тегах, в которых надо заменять.
Я про потоки говорил, потому что как раз данную тему разбираем.
А вот про Cишную библиотеку для парсинга xml впервые слышу.
Я просто думал, это можно реализовать обычным кодом.

Ну или могу свою дать, давно писал правда, но работает.
Если не сложно, дай пожалуйста свою, попытаюсь разобраться.
ASCII
90 / 62 / 10
Регистрация: 15.12.2013
Сообщений: 399
Завершенные тесты: 2
23.08.2015, 12:23     Заменить теги в HTML-файле. #9
Вернусь домой, кину в лс
Kerry_Jr
Модератор
Эксперт PHP
2178 / 1974 / 689
Регистрация: 14.05.2014
Сообщений: 5,773
Записей в блоге: 1
Завершенные тесты: 5
23.08.2015, 12:26     Заменить теги в HTML-файле. #10
Цитата Сообщение от ASCII Посмотреть сообщение
причем тут потоки?
предполагаю, здесь про потоки ввода-вывода речь идет.
Андрюшатина
28 / 28 / 13
Регистрация: 27.11.2014
Сообщений: 182
23.08.2015, 15:22  [ТС]     Заменить теги в HTML-файле. #11
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
предполагаю, здесь про потоки ввода-вывода речь идет.
Заранее извините за нубство, но очень хочу разобраться, тема для меня тёмный лес.
Ещё посидел покопался в msdn. И как я понял из подсказки про потоки ввода-вывода, тогда может это можно сделать по примеру потоков STL?
Посмотрите, начало должно быть такое?
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <fstream>
using namespace std;
const char *filename = "test.html";
int main() {
    ofstream ostr;
    ostr.open(filename);
    if (ostr) {
        for (int i = 0; i < ?????; i++) {
            ostr << ????? << endl;
сразу хотел уточнить, чтобы заменить теги, мы для начала должны узнать размер исходного файла?
а после должны запустить поиск по определенным критериям?
а после, переписать данные в новый файл, только с заменой нужных тегов?
а по итогу эти новые данные записать в новый, созданный ХТМЛ файл?
Kerry_Jr
Модератор
Эксперт PHP
2178 / 1974 / 689
Регистрация: 14.05.2014
Сообщений: 5,773
Записей в блоге: 1
Завершенные тесты: 5
23.08.2015, 20:06     Заменить теги в HTML-файле. #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Андрюшатина,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <fstream>
 
int main()
{
    std::ifstream fin("page.html");
    std::ofstream fout ("page2.html");
    std::string line;
    std::string pattern = "strong>";
    std::string replacement = "blockquote>";
    std::string::size_type n;
    while (std::getline(fin, line))
    {
        n = 0;
        while ((n = line.find(pattern, n)) != std::string::npos)
        {
            line.replace(n, pattern.size(), replacement);
            n += replacement.size();
        }
        fout << line << std::endl;
    }
    
    return 0;
}
Андрюшатина
28 / 28 / 13
Регистрация: 27.11.2014
Сообщений: 182
23.08.2015, 23:14  [ТС]     Заменить теги в HTML-файле. #13
Спасибо большое за помощь, можно небольшое уточнение спросить?
Не до конца понял, что делает 17 строка?
C++
1
 n += replacement.size();
Enno
266 / 169 / 38
Регистрация: 25.08.2014
Сообщений: 1,088
Записей в блоге: 1
24.08.2015, 08:12     Заменить теги в HTML-файле. #14
Смещает позицию поиска на длину заменённого фрагмента (в данном случае "blockquote>").
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2015, 17:17     Заменить теги в HTML-файле.
Еще ссылки по теме:

Заменить в файле одну строку на другую - C++
Реализовать в программе функцию замену в текстовом файле заданной строки на другую строку, также задаваемую с клавиатуры.

В файле заменить прописные буквы строчными - C++
Дан символьный файл. Получить файл, образованный из файла заменой всех его прописных (больших) букв одноименными строчными (малыми).

Как заменить русский текст в файле? - C++
Мне нужно написать функцию,которая заменяет русский текст без учета регистра в файле.Типа void repl(char* file,char* str1,char* str2)

Заменить все пробелы в текстовом файле запятыми - C++
1. В текстовом файле записаны фразы, который отделены друг от друга точками, слова – пробелами и знаками препинаниями; заменить все пробелы...

Заменить в файле каждую первую букву слова на прописную - C++
Написать программу, которая считывает текст из файла и выводит его на экран, заменив каждую первую букву слов на прописную. Помогите...


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

Или воспользуйтесь поиском по форуму:
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
24.08.2015, 17:17     Заменить теги в HTML-файле. #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
#include <string>
#include <boost/regex.hpp>
 
int main ()
{
    std::ifstream in ("in.txt");
    std::ofstream out ("out.txt");
    std::string line;
    while (std::getline (in, line))
    {
        std::string temp;
        temp = boost::regex_replace (line, boost::regex ("<strong>"), "<blockquote>");
        temp = boost::regex_replace (temp, boost::regex ("</strong>"), "</blockquote>");
        out << temp << "\n";
    }
    return 0;
}
Yandex
Объявления
24.08.2015, 17:17     Заменить теги в HTML-файле.
Ответ Создать тему
Опции темы

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