Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Поиск и замена в тексте (извлечение подстроки) (http://forum.oszone.net/showthread.php?t=170703)

dima1981 19-03-2010 23:48 1372831

Поиск и замена в тексте (извлечение подстроки)
 
Наверно это С )

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

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

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

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

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

dima1981 20-03-2010 10:58 1373036

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

# Пример в PHP

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

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

Drongo 20-03-2010 13:03 1373111

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

dima1981 20-03-2010 13:38 1373134

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

Drongo 20-03-2010 15:36 1373195

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));


dima1981 20-03-2010 16:22 1373225

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

спс за пример

Drongo 20-03-2010 17:31 1373274

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
          }
        }
    }
...


dima1981 21-03-2010 04:01 1373588

второй час лазию, смотрю, но понять куда это записывать в блокнот в html или php страницу, и в какой форме, надо ли этот код в теги какие то помещать или нет прописал в такой
HTML код:

<script type="text/javascript">
// Обрабатываем по нажатию на кнопку "Сортировать"------

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

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

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

Drongo 21-03-2010 14:23 1373745

dima1981, Привет.
Цитата:

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

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

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

Цитата:

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

Спасибо за оценку. Базы у программы находятся внутри неё самой.

dima1981 21-03-2010 15:34 1373777

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

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

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


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

dima1981 21-03-2010 15:50 1373788

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

P.S. авторские? рульно ) Всех вам успехов в этом Drongo! С уважением dima1981.


Время: 13:32.

Время: 13:32.
© OSzone.net 2001-