|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Поиск и замена в тексте (извлечение подстроки) |
|
|
C/C++ - [решено] Поиск и замена в тексте (извлечение подстроки)
|
Ветеран Сообщения: 512 |
Профиль | Отправить PM | Цитировать Наверно это С )
Скажите пожалуйста, есть текст в нем знаки слова и тп, но есть только одно слово заключеное в скобки и встречающееся большое колличество раз, можно ли каким то оброзом очистить текст оставив только слова в скобках? я совсем не разбираюсь в этом у меня получается только так sed -n /начало/p /1234.txt>>/12345.txt оставлять строки в которых это слово встречается, потом т.к. его позиция статична в каждой строке относительно расположения то cut -c 90- /12334.txt в итоге остаются строки начинающиеся с этого слово и это слово в них первым, если бы слово было постоянно одинаковым, то так же бы рубанул и все но это слово постоянно различной длины но начинается с одинаковых букв остальных генерируются автоматически и качество и количество, например поток все, реально ли такое сделать? |
|
------- Отправлено: 23:48, 19-03-2010 |
Ветеран Сообщения: 512
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать dima1981, Скиньте пример текста, который нужно обрабатывать. Лучше прикрепить файлом.
|
------- Отправлено: 13:03, 20-03-2010 | #3 |
Ветеран Сообщения: 512
|
Профиль | Отправить PM | Цитировать Например в этом файле оставить только те url полностью в которых есть слово windows, сори данные личного х-ра, потому оригинал не могу прикрепить при всем желании, думаю понимаете
|
------- Отправлено: 13:38, 20-03-2010 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать dima1981, Пример работает, но частично из-за специфики текстового файла иногда не так высчитывает как надо. Результат получается такой
... // Обрабатываем по нажатию на кнопку "Сортировать"------ 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(); } //--------------------------------------------------------------------------- ... Цитата:
|
||
------- Отправлено: 15:36, 20-03-2010 | #5 |
Ветеран Сообщения: 512
|
Профиль | Отправить PM | Цитировать Drongo, ух ты, круто, мне понравился результат, вот только что с этим кодом сделать, куда мне его например прописывать, и охото узнать, это регуляоными выражениями получилось или это дельфи или с++, как этот код называется, который дает такой результат? потому что дальше придется его корректировать, но вот в какую именно область лезть при этом представить даже не могу?
спс за пример |
------- Отправлено: 16:22, 20-03-2010 | #6 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать dima1981,
Цитата dima1981:
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 } } } ... |
|
------- Отправлено: 17:31, 20-03-2010 | #7 |
Ветеран Сообщения: 512
|
Профиль | Отправить PM | Цитировать второй час лазию, смотрю, но понять куда это записывать в блокнот в html или php страницу, и в какой форме, надо ли этот код в теги какие то помещать или нет прописал в такой
не получается, пустая страница в общем понять не могу как с ним и что делать, для этого что Visual C++ нужен? В консоли например при выполнении первых действий, которые в первом сообщении описаны все получается, но если я этот код в нее пропишу то егоры на егорах и код естественно не выполняется, иду дальше смотреть... P.S. за разъяснения Drongo, благодарю и оч признателен, спс. Кстати смотрел этот сайт на который ссылка из подписи про антивирусы, классно сделано! только я не совсем смог понять как это работает и откуда эта программа берет базы на основе которых производит сканирование, но впечатления исключительно положительные, оч люблю простой дизайн, что дает скорости! потому что красиво упаковать можно даже известно что и начнут брать в отличии от того что не так привлекательно но гораздо лучше, это наверно природа такая у нас встречать по одежке и так уж повелось, хорошо хоть разумом наделены и потом можем сделать правилный выбор и к такому положению вещей приумываем еще одно правило не все то золото что блестит, ну да ладно, пойду дальше... |
------- Отправлено: 04:01, 21-03-2010 | #8 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать dima1981, Привет.
Цитата dima1981:
Memo, RichEdit, Button(2 шт.) В обработчике OnClick одного Button пишем самый длинный код, обрабатывающий текст, в обработчике OnClick другого Button пишем второй код, очищающий Memo и загрузающий текст из буфера обмена. У вас какая среда разработки? Visual C++ ? Цитата dima1981:
|
||
------- Отправлено: 14:23, 21-03-2010 | #9 |
Ветеран Сообщения: 512
|
Профиль | Отправить PM | Цитировать Спс Drongo за разъяснения, вобщето необходимости такой теперь нет, но все таки стало интересно как это работает, поэтому сочту за честь продолжить этот диалог и понять что смогу из него приложив к этому все имеющиеся возможности различного рода.
У меня ubuntu поэтому скорее всего придется что то для нее подбирать. щас пойду в интернет посмотрю что можно придумать и если встретится то что надо то все таки сделать то что начал но а нет так нет я не целеустремленный сам по себе хорошо бы под ubuntu что то сделать подобное, потому что тут появилась идея программы только вот на счет морального ее аспекта не совсем уверен, но в общем гляда на то что творится в мире да и в сети, думаю она еще даже и более моральная чем нет, но не уверен что получится, походу трудно ее сделать, хотя представляю хорошо т.е. нормально но не полностью какой она получится если получится Сори за габариты |
------- Отправлено: 15:34, 21-03-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Поиск количества строк в тексте | 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 |
|