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

Показать сообщение отдельно

Аватара для 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