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

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

Восстановить пароль Регистрация
 
Андрюшатина
 Аватар для Андрюшатина
28 / 28 / 13
Регистрация: 27.11.2014
Сообщений: 174
23.08.2015, 00:51     Заменить теги в HTML-файле. #1
Добрый день форумчане, помогите нубу.
Код за меня не прошу писать, ну разве что, у вас завалялся похожий пример.
У меня трудности с пониманием потоков, поэтому даже начать задачу не могу.
Прошу подсказки, с чем в данном случае нужно работать?


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

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

Спасибо!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ASCII
 Аватар для ASCII
82 / 54 / 8
Регистрация: 15.12.2013
Сообщений: 369
Завершенные тесты: 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
 Аватар для ASCII
82 / 54 / 8
Регистрация: 15.12.2013
Сообщений: 369
Завершенные тесты: 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
265 / 168 / 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
Сообщений: 174
23.08.2015, 12:06  [ТС]     Заменить теги в HTML-файле. #8
Цитата Сообщение от ASCII Посмотреть сообщение
Причем тут простая замена? Таких слов в документе может встречаться много, в том числе и не в тех тегах, в которых надо заменять.
Я про потоки говорил, потому что как раз данную тему разбираем.
А вот про Cишную библиотеку для парсинга xml впервые слышу.
Я просто думал, это можно реализовать обычным кодом.

Ну или могу свою дать, давно писал правда, но работает.
Если не сложно, дай пожалуйста свою, попытаюсь разобраться.
ASCII
 Аватар для ASCII
82 / 54 / 8
Регистрация: 15.12.2013
Сообщений: 369
Завершенные тесты: 2
23.08.2015, 12:23     Заменить теги в HTML-файле. #9
Вернусь домой, кину в лс
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
23.08.2015, 12:26     Заменить теги в HTML-файле. #10
Цитата Сообщение от ASCII Посмотреть сообщение
причем тут потоки?
предполагаю, здесь про потоки ввода-вывода речь идет.
Андрюшатина
 Аватар для Андрюшатина
28 / 28 / 13
Регистрация: 27.11.2014
Сообщений: 174
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
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 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
Сообщений: 174
23.08.2015, 23:14  [ТС]     Заменить теги в HTML-файле. #13
Спасибо большое за помощь, можно небольшое уточнение спросить?
Не до конца понял, что делает 17 строка?
C++
1
 n += replacement.size();
Enno
265 / 168 / 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++ Заменить в файле каждую первую букву слова на прописную

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

Или воспользуйтесь поиском по форуму:
MicM
 Аватар для MicM
820 / 487 / 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-файле.
Ответ Создать тему
Опции темы

Текущее время: 10:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru