Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2012, 10:46   #1
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию Удаление ссылок с текста

Привет Всем!

Вот сделал функцию для удаления ссылок со строки, только её нужно чуть доделать. кто может помочь?

Код:
function ParseInet(var s: string): string;
const
  domArr: array[1..15] of string =
  ('.com.ru', '.ru', '.com', '.net', '.org', '.kz', '.ua', '.рф', '.tv', '.info', '.xxx', '.su', '.info', '.me', '.pro');
  symArr: array[1..4] of string = (')', ']', '}', '>');
  symArr2: array[1..4] of string = ('(', '[', '{', '<');

  function getWWW: integer;
  begin
    Result := pos('http://www.', lowercase(s));
    if Result = 0 then Result := pos('http://', lowercase(s));
    if Result = 0 then Result := pos('www.', lowercase(s));
    if Result = 0 then Result := 1;
  end;

  function getDomain: integer;
  var
    j: integer;
  begin
    Result := 0;

    for j := 1 to 15 do
    begin
      Result := Pos(domArr[j], lowercase(s));
      if Result > 0 then
      begin
        inc(Result, length(domArr[j]));
        Break;
      end;
    end;
  end;

var
  url, dom: integer;
  i, j: integer;
  sym: string;
begin
  if (s <> '') then
  begin
    sym := '';
    dom := getDomain; // поиск домена
    url := getWWW; // поиск начала ссылки

    if dom > 0 then
    begin
      // поиск символа
      for i := 1 to 4 do
      begin
        if (s[dom] = symArr[i]) then
        begin
          dom := dom + 1;
          sym := symArr2[i];
          break;
        end;
      end;
      // ...

      if sym <> '' then // если символ найден, ищем его в строке
        url := PosEx(sym, s, url);

      if (dom > 1) and (url < dom) then
        Delete(s, url, dom - url);
    end;
  end;
  Result := trim(s);
end;
Исходник посмотрите, понятней будет
Вложения
Тип файла: zip temp.zip (210.5 Кб, 8 просмотров)
ZuBy вне форума Ответить с цитированием
Старый 10.03.2012, 11:14   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

можно пройтись функцией stringreplace по строке и заменить ей все ссылки))
Кольша вне форума Ответить с цитированием
Старый 10.03.2012, 11:16   #3
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

нет, не подходит. ссылки в строках всегда разные
ZuBy вне форума Ответить с цитированием
Старый 10.03.2012, 11:40   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. зачем var s: string в ParseInet не понятно
2. смотрим if (s[dom] = symArr[i]) then
dom указывает на следующую позицию после имени домена, а там пробел вместо ожидаемой закрывающей скобки. Сама скобка дальше. И что?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.03.2012, 11:47   #5
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Аватар
1. Delete процедуру знаешь? там var нужна, чтобы можно было совершить удаление
2. не понял
ZuBy вне форума Ответить с цитированием
Старый 10.03.2012, 12:10   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Delete процедуру знаю. Кто заставляет удалять непосредственно из параметра? Локальную переменную нельзя сделать, засунуть в нее значение параметра и работать с локальной?
2. В результате будет то, что вид закрывающей скобки не найдется, соответственно и вид открывающей, со всеми вытекающими последствиями. В примере есть же такая ситуация, в предпоследней записи кажется. Что там возвращается? ]
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.03.2012, 12:16   #7
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

та первое не проблема, там все нормально.
и второе тоже нормально, отвечу почему предпоследний возращает "]"
[Mp3Zone.kz_Nurasyl959595@mail.ru] - вот тут парится потому что.
а в остальном все нормально, меня больше интересует как сделать чтобы правильно выводилась именно вот эта строчка "Guf- дома.mp3 mp3.net"
ZuBy вне форума Ответить с цитированием
Старый 10.03.2012, 12:25   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Guf- дома.mp3 mp3.net - нет скобок, значит от .net справа налево искать первый пробел и считать, что все левее пробела нужный текст. А в том случае, что я говорил пробел убрать после mail.ru и все нормально будет, и то только потому, что .ru в domArr имеет индекс меньший, чем .kz
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.03.2012, 13:09   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

вот в этом та и вся проблема, если делать поиск пробела, то весь код насмарку.
может есть у кого решение?
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Notepad++ удаление ссылок из текста alexp21 Софт 4 01.10.2011 01:17
Notepad++ удаление ссылок из текста alexp21 Софт 0 29.09.2011 20:57
Удаление одинаковых ссылок из ячеек Matras Microsoft Office Excel 1 15.03.2011 21:22
удаление одинаковых ссылок neoman1 Microsoft Office Word 6 30.11.2009 16:05
Удаление текстов ссылок PeterMinin Microsoft Office Word 11 22.10.2009 12:45