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