Re[3]: самый быстрый способ удалить все <any html tag>
От: jazzer Россия Skype: enerjazzer
Дата: 05.02.13 01:21
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>Здравствуйте, jazzer, Вы писали:


J>>Если этот тег не встречается больше нигде, то регэкспом, вестимо.


J>ой что то я не уверен ...


J>помните первую тему про регулярки мне пришлось переписать все на указателях и

J>заработало фантастически быстро ...

Ну-ну. Удачи с запихиванием any html tag в указатели

J>так что думаю стоит рассматривать только реализацию на голых указателях ...


Хозяин — барин

J>просто это команда в гуи и она должна мгновенно выдавать результат ...


даже с файлом на 5ГБ?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[4]: самый быстрый способ удалить все <any html tag>
От: jyuyjiyuijyu  
Дата: 05.02.13 07:11
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Ну-ну. Удачи с запихиванием any html tag в указатели


у меня мной сгенерированный хтмл поэтому я могу просто искать < > и вырезать их

J>>просто это команда в гуи и она должна мгновенно выдавать результат ...


J>даже с файлом на 5ГБ?


таких файлов не может быть думаю максимум до 100 мб
Re[5]: самый быстрый способ удалить все <any html tag>
От: jazzer Россия Skype: enerjazzer
Дата: 05.02.13 07:24
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>у меня мной сгенерированный хтмл поэтому я могу просто искать < > и вырезать их


Т.е. тебе надо вырезать не html-теги, а просто текст между угловыми скобками?
Тогда на указателях проще всего, и пишется в три строчки: копируешь все до открывающей скобки, потом ищешь закрывающую, потом идешь обратно на шаг 1.

J>>>просто это команда в гуи и она должна мгновенно выдавать результат ...


J>>даже с файлом на 5ГБ?


J>таких файлов не может быть думаю максимум до 100 мб

и куда оно в гуй выдаст 100-метровый результат?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: самый быстрый способ удалить все <any html tag>
От: jyuyjiyuijyu  
Дата: 05.02.13 07:41
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Т.е. тебе надо вырезать не html-теги, а просто текст между угловыми скобками?

J>Тогда на указателях проще всего, и пишется в три строчки: копируешь все до открывающей скобки, потом ищешь закрывающую, потом идешь обратно на шаг 1.

ну я примерно такой код и набросал вот он но это пока черновик

void fast_remove_tags(const std::wstring& text, std::wstring& ret)
{
    PСWSTR p = text.c_str(), q;
    PCWSTR hdr = L"<DIV class=ST>";
    p = wcsstr(p, hdr);
    p += wcslen(hdr);
    while (*p)
    {
        q = wcschr(p, L'<');
        if (!q)
        {
            break;
        }
        if (q - p)
        {
            ret.append(p, q - p);
        }
        if (q[1] == L'B' && q[2] == L'R' && q[3] == L'>')
        {
            ret.append(L"\r\n");
        }
        p = wcschr(q, L'>') + 1;
    }
}


возможно лучше заменить wcschr на цикл ? профайлер еще не натравливал на этот код ...

J>>>>просто это команда в гуи и она должна мгновенно выдавать результат ...


J>>>даже с файлом на 5ГБ?


J>>таких файлов не может быть думаю максимум до 100 мб

J>и куда оно в гуй выдаст 100-метровый результат?

ну это я тоже преувеличил думаю реально 3 мб где то ...
Re[6]: самый быстрый способ удалить все <any html tag>
От: jyuyjiyuijyu  
Дата: 05.02.13 07:43
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Т.е. тебе надо вырезать не html-теги, а просто текст между угловыми скобками?


только не между а включая ...
Re[6]: самый быстрый способ удалить все <any html tag>
От: jyuyjiyuijyu  
Дата: 05.02.13 11:39
Оценка:
Здравствуйте, jazzer, Вы писали:

J>и куда оно в гуй выдаст 100-метровый результат?


а вообще это не в гуй надо а в буфер обмена
Re[3]: самый быстрый способ удалить все <any html tag>
От: Кодт Россия  
Дата: 05.02.13 20:16
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>единственное что тег <br> нужно не просто удалить а заменить его на перевод строки \r\n


Ага, а как насчёт превращения всяких &entity; и &#nnn; в соответствующие символы?
По крайней мере, &lt;, &gt;, &amp; точно.
Перекуём баги на фичи!
Re[4]: самый быстрый способ удалить все <any html tag>
От: jyuyjiyuijyu  
Дата: 05.02.13 20:38
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Ага, а как насчёт превращения всяких &entity; и &#nnn; в соответствующие символы?

К>По крайней мере, &lt;, &gt;, &amp; точно.

у меня же смешанная сборка натив + менеджед я юзаю HttpUtility::HtmlDecode

#pragma unmanaged

void fast_remove_tags(const std::wstring& text, std::wstring& ret)
{
   ...
}

#pragma managed

std::wstring d = marshal_as<std::wstring>(webBrowser1->DocumentText);
std::wstring ret;
fast_remove_tags(d, ret);
if (ret.size())
{
    Clipboard::SetText(Web::HttpUtility::HtmlDecode(marshal_as<String^>(ret)));
}
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.