Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Поиск и замена в тексте (извлечение подстроки)

Ответить
Настройки темы
C/C++ - [решено] Поиск и замена в тексте (извлечение подстроки)

Аватара для dima1981

Ветеран


Сообщения: 512
Благодарности: 23

Профиль | Отправить PM | Цитировать


Наверно это С )

Скажите пожалуйста, есть текст в нем знаки слова и тп, но есть только одно слово заключеное в скобки и встречающееся большое колличество раз, можно ли каким то оброзом очистить текст оставив только слова в скобках?

я совсем не разбираюсь в этом у меня получается только так

sed -n /начало/p /1234.txt>>/12345.txt

оставлять строки в которых это слово встречается, потом т.к. его позиция статична в каждой строке относительно расположения то

cut -c 90- /12334.txt
в итоге остаются строки начинающиеся с этого слово и это слово в них первым, если бы слово было постоянно одинаковым, то так же бы рубанул и все но это слово постоянно различной длины но начинается с одинаковых букв остальных генерируются автоматически и качество и количество, например поток все, реально ли такое сделать?

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 23:48, 19-03-2010

 

Аватара для dima1981

Ветеран


Сообщения: 512
Благодарности: 23

Профиль | Отправить PM | Цитировать


Вот встретился такой пример

# Пример в PHP

$text = preg_replace("#(https?|ftp)://\S+[^\s.,>)\];'\&
quot;!?]#", '<a href="\\0">\\0</a>', $text);

с этого сайта http://www.pcre.ru/examples/links/text/4/ только что с этим делать, подскажите пожалуйста? в принципе можно бы было по этому шаблону и сделать, но вот только как с этим кодом быть, его в файле сохранять или в консоли прописывать и потом как его направить на файл содержащий текст или я вобще не в тот форум залез, но вроде это программирование но только с текстом ?

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 10:58, 20-03-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


dima1981, Скиньте пример текста, который нужно обрабатывать. Лучше прикрепить файлом.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 13:03, 20-03-2010 | #3


Аватара для dima1981

Ветеран


Сообщения: 512
Благодарности: 23

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt soft.oszone.txt
(62.3 Kb, 17 просмотров)

Например в этом файле оставить только те url полностью в которых есть слово windows, сори данные личного х-ра, потому оригинал не могу прикрепить при всем желании, думаю понимаете

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 13:38, 20-03-2010 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


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

результат

Код: Выделить весь код
http://www.oszone.net/1/Windows
http://www.oszone.net/1/Windows
http://www.oszone.net/8628/windows_7
http://www.oszone.net/10/Windows_Vista
http://www.oszone.net/8/Windows_XP
http://www.oszone.net/5021/Windows_Server_2008
http://www.oszone.net/9/Windows_Server_2003
http://www.oszone.net/7/Windows_2000_NT
http://www.oszone.net/6/
http://www.oszone.net/5681/Windows_Services
http://www.oszone.net/11612/Windows_Live_Wave_4_leaked">В Интернет просочились скриншоты Windows Live Wave 4</a> <a href="http://www.oszone.net/11612/Windows_Live_Wave_4_leaked"><img src="/img/2/arrow.gif" alt="Читать далее..." width="3" height="5" vspace="1" border="0
http://www.oszone.net/11607/Unsurprisingly_IE9_wont_be_supported_on_an_obsolete_OS">К всеобщему удивлению, Internet Explorer 9 не будет работать на Windows XP</a> <a href="http://www.oszone.net/11607/Unsurprisingly_IE9_wont_be_supported_on_an_obsolete_OS"><img src="/img/2/arrow.gif" alt="Читать далее..." width="3" height="5" vspace="1" border="0
http://www.oszone.net/5681/Windows_Services
http://www.oszone.net/4327/FAQ_Windows_Vista
http://www.oszone.net/106/
http://www.oszone.net/5021/Windows_Server_2008
http://soft.oszone.net/program/30/"><img src="http://tools.oszone.net/Blast/unattended.png" alt="Учебник по автоустановке Windows" width="48" height="48" border="0" align="left


Код: Выделить весь код
...
// Обрабатываем по нажатию на кнопку "Сортировать"------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int start, end, sub;
   TStringList *General = new TStringList();
   TStringList *list = new TStringList();

   if(RichEdit1->Lines->Text != ""){
      General->Text = RichEdit1->Text;
      for(int i = 0; i < General->Count; i++){
         if(General->Strings[i].LowerCase().Pos("href=\"") && General->Strings[i].LowerCase().Pos("http:") && General->Strings[i].LowerCase().Pos("windows")){
            start = General->Strings[i].LowerCase().Pos("href=\"") + String("href=\"").Length();
            end = General->Strings[i].LowerCase().LastDelimiter("\"");  // В этой строке причина неточного расчёта. LastDelimiter ищет последнее вхождение указаного символа...
            sub = end - start;
            list->Add(General->Strings[i].SubString(start, sub));
           }
        }
     }

    Memo2->Text = list->Text;
    General->Clear();
    list->Clear();
}
// Кнопка "Вставить текст"------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  RichEdit1->Clear();
  RichEdit1->PasteFromClipboard();
}
//---------------------------------------------------------------------------
...
Если в вашей задаче нужно найти слово входящее в скобки. Например:
Цитата:
какой-то текст находящийся в файле и вот здесь [искомое слово], которое нам надо извлечь
То можно искать:
Код: Выделить весь код
start = General->Strings[i].Pos("[");
end = General->Strings[i].Pos("]");
sub = end - start;
list->Add(General->Strings[i].SubString(start, sub));

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:36, 20-03-2010 | #5


Аватара для dima1981

Ветеран


Сообщения: 512
Благодарности: 23

Профиль | Отправить PM | Цитировать


Drongo, ух ты, круто, мне понравился результат, вот только что с этим кодом сделать, куда мне его например прописывать, и охото узнать, это регуляоными выражениями получилось или это дельфи или с++, как этот код называется, который дает такой результат? потому что дальше придется его корректировать, но вот в какую именно область лезть при этом представить даже не могу?

спс за пример

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 16:22, 20-03-2010 | #6


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


dima1981,
Цитата dima1981:
Drongo, ух ты, круто, мне понравился результат,
1. вот только что с этим кодом сделать, куда мне его например прописывать,
2. и охото узнать, это регулярными выражениями получилось
3. или это дельфи или с++, как этот код называется, который дает такой результат?
4. потому что дальше придется его корректировать, но вот в какую именно область лезть при этом представить даже не могу? »
Спасибо, но крутого тут ничего нет, скорее дилетанская реализация.
1. Код нужно прописать в обработчик кнопки OnClick, по нажатию на которую должно происходить событие (обработка текста).
2. Да, выражения регулярные. Они помечены в коде красным цветом(комментарии к коду зелёным, они не играют роли и служат как вспомогательное описание кода). Когда Мы загрузили текст в RichEdit и General дальше вычисляем общее количество строк. После чего ищем в строке, функцией Pos() выражения характеризующие ссылку и искомое слово (href, windows, http:) если в строке надены все три вхождения, то пробуем вычислить начало ссылки и замыкающий символ ссылки - ". На этой основе мы вычисляем длину подстроки и извлекаем её в итоговый список
3. Это C++. Тема ведь помечена категорией C\C++.
4. Коррекция может ничего не дать из-за того что структура файла-примера и вашего целевого файла может различаться. (Я понимаю, что если личное это личное, но с другой стороны и код будет работать где-то в пределах или около того...) Для корректировки нужно\можно редактировать\добавлять\удалять значения в функции Pos и LastDelimiter

Код: Выделить весь код
...
   if(RichEdit1->Lines->Text != ""){
      General->Text = RichEdit1->Text;  // Загружаем текст в рабочий список General
      for(int i = 0; i < General->Count; i++){ // Узнаём количество строк
         if(General->Strings[i].LowerCase().Pos("href=\"") && General->Strings[i].LowerCase().Pos("http:") && General->Strings[i].LowerCase().Pos("windows")){
            start = General->Strings[i].LowerCase().Pos("href=\"") + String("href=\"").Length(); // Вычисляем начало ссылки
            end = General->Strings[i].LowerCase().LastDelimiter("\"");  // В этой строке причина неточного расчёта. LastDelimiter ищет последнее вхождение указаного символа...
            sub = end - start; // Вычисляем длину подстроки
            list->Add(General->Strings[i].SubString(start, sub)); // Извлекаем строку в итоговый список list
           }
        }
     }
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 17:31, 20-03-2010 | #7


Аватара для dima1981

Ветеран


Сообщения: 512
Благодарности: 23

Профиль | Отправить PM | Цитировать


второй час лазию, смотрю, но понять куда это записывать в блокнот в html или php страницу, и в какой форме, надо ли этот код в теги какие то помещать или нет прописал в такой
HTML код: Выделить весь код
<script type="text/javascript"> // Обрабатываем по нажатию на кнопку "Сортировать"------

не получается, пустая страница в общем понять не могу как с ним и что делать, для этого что Visual C++ нужен?

В консоли например при выполнении первых действий, которые в первом сообщении описаны все получается, но если я этот код в нее пропишу то егоры на егорах и код естественно не выполняется, иду дальше смотреть...

P.S. за разъяснения Drongo, благодарю и оч признателен, спс. Кстати смотрел этот сайт на который ссылка из подписи про антивирусы, классно сделано! только я не совсем смог понять как это работает и откуда эта программа берет базы на основе которых производит сканирование, но впечатления исключительно положительные, оч люблю простой дизайн, что дает скорости! потому что красиво упаковать можно даже известно что и начнут брать в отличии от того что не так привлекательно но гораздо лучше, это наверно природа такая у нас встречать по одежке и так уж повелось, хорошо хоть разумом наделены и потом можем сделать правилный выбор и к такому положению вещей приумываем еще одно правило не все то золото что блестит, ну да ладно, пойду дальше...

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 04:01, 21-03-2010 | #8


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


dima1981, Привет.
Цитата dima1981:
в общем понять не могу как с ним и что делать, для этого что Visual C++ нужен? »
Да, нужна среда разработки: Visual C++ или Borland C++ Builder. Дальше просто кидаются на форму:
Memo, RichEdit, Button(2 шт.) В обработчике OnClick одного Button пишем самый длинный код, обрабатывающий текст, в обработчике OnClick другого Button пишем второй код, очищающий Memo и загрузающий текст из буфера обмена.

У вас какая среда разработки? Visual C++ ?

Цитата dima1981:
только я не совсем смог понять как это работает и откуда эта программа берет базы на основе которых производит сканирование, но впечатления исключительно положительные, оч люблю простой дизайн, что дает скорости! »
Спасибо за оценку. Базы у программы находятся внутри неё самой.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:23, 21-03-2010 | #9


Аватара для dima1981

Ветеран


Сообщения: 512
Благодарности: 23

Профиль | Отправить PM | Цитировать


Спс Drongo за разъяснения, вобщето необходимости такой теперь нет, но все таки стало интересно как это работает, поэтому сочту за честь продолжить этот диалог и понять что смогу из него приложив к этому все имеющиеся возможности различного рода.

У меня ubuntu поэтому скорее всего придется что то для нее подбирать. щас пойду в интернет посмотрю что можно придумать и если встретится то что надо то все таки сделать то что начал но а нет так нет я не целеустремленный сам по себе

хорошо бы под ubuntu что то сделать подобное, потому что тут появилась идея программы только вот на счет морального ее аспекта не совсем уверен, но в общем гляда на то что творится в мире да и в сети, думаю она еще даже и более моральная чем нет, но не уверен что получится, походу трудно ее сделать, хотя представляю хорошо т.е. нормально но не полностью какой она получится если получится


Сори за габариты

-------
не уверен, что знаешь наверняка, говори об этом заблаговремено )


Отправлено: 15:34, 21-03-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Поиск и замена в тексте (извлечение подстроки)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Поиск количества строк в тексте DaRiYs Программирование и базы данных 2 15-03-2010 16:24
VBS/WSH/JS - [решено] Поиск и замена индивидуальных данных в реестре an99dre Скриптовые языки администрирования Windows 2 14-03-2010 11:51
Создание подстроки в Word'e kop4enyi Хочу все знать 2 10-07-2008 12:55
Search & Replace (Поиск и Замена) pingUIN Хочу все знать 8 31-12-2007 10:57
замена символа в тексте (PHP)   Casufi Вебмастеру 3 11-04-2003 11:07




 
Переход