Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить адрес из суммы двух адресов? [D7, XP]


SamProf ©   (2005-10-26 21:36:00) 

Есть скажем такой путь:
1) http://a/b/c/d.html
и есть путь:
2) a/w/e.html
Как получить путь:
http://a/b/c/a/w/e.html?
В этом беды нет, НО!!!:
если второй путь будет таким:
2) ../../f/g/h.html
Тогда искомый путь будет таким:
http://a/f/g/h.html (вроде так......)
А может второй путь вообще будет полным.....
Может есть способ получить искомый путь какимито средствами?
Спасибо!


SamProf   (2005-10-27 14:22:00) [1]

Пасибо!


Zeqfreed   (2005-10-27 14:01:00) [2]

SamProf ©   (27.10.05 13:05) [4]

function GetUpLevelFolder(const Str : String) : String;
const
 sep = ['/', '\'];
var
 l, i : Integer;
begin
 Result := '';

 l := length(Str);
 if (Str[l] in sep) then Dec(l);

 for i := l downto 1 do begin
  if (Str[i] in sep) then begin
   Result := Copy(Str, 1, i);
   Exit;
  end;
 end;
end;

function GetRelativePath(const Base, Bias : String) : String;

 function ModifyPath(var Path : String; const Modifier : String) : Boolean;
 begin
  Result := false;

  if (Modifier <> '') then begin
   if Modifier = '..' then
    Path := GetUpLevelFolder(Path)
   else if (Modifier <> '.') then begin
    Path := Path + Modifier;
    Result := true;
   end;
  end;
 end;

const
 sep = ['/', '\'];
var
 curPath : String;
 fldr : String;
 i : Integer;
begin
 curPath := GetUpLevelFolder(Base);
 for i := 1 to length(Bias) do begin
  if (Bias[i] in sep) then begin
   if ModifyPath(curPath, fldr) then begin
    curPath := curPath + Bias[i];
   end;
   fldr := '';
  end else
   fldr := fldr + Bias[i];
 end;
 ModifyPath(curPath, fldr);

 Result := curPath;
end;


Может быть это тебе больше понравится :)
Проверки на корректность перехода уровнем выше нет.


SamProf   (2005-10-27 13:05:00) [3]


> Я понял так, что второй путь a/w/e.html это ссылка, стоящая
> на страничке e.html Если эта ссылка не начинается с / (корень),
>  то она относительная и поиск файла начинается с директории
> в которой лежит файл e.html
>
> По-моему автор пишет программу обработки скачанной Интернета
> странички и исправляет в ней ссылки. Если так, то стандартных
> функций для решения проблемы я не знаю.
>


Вот человек правильно меня понял! Прошу мне помочь, я конечно функцию написал, но она очень глупо выглядет:

function GetUrl(s1,s2:string):String;
var
  q1,q2:string;
begin
q1:=s1;
q2:=s2;
while q1[length(q1)]<>'/' do delete(q1,length(q1),1);
    if pos('http',s2)<>0 then
       begin
       result:=s2;
       exit;
       end else
    if pos('..',s2)<>0 then
       begin
       while copy(q2,1,3)='../' do
             begin
             delete(q1,length(q1),1);
             while q1[length(q1)]<>'/' do delete(q1,length(q1),1);
             delete(q2,1,3);
             end;
       end;
    result:=q1+q2;
end;


Может есть что-то получше?


palva   (2005-10-27 11:14:00) [4]

> нифига не понятно что ты хочешь.
Я понял так, что второй путь a/w/e.html это ссылка, стоящая на страничке e.html Если эта ссылка не начинается с / (корень), то она относительная и поиск файла начинается с директории в которой лежит файл e.html

По-моему автор пишет программу обработки скачанной Интернета странички и исправляет в ней ссылки. Если так, то стандартных функций для решения проблемы я не знаю.


umbra   (2005-10-27 10:12:00) [5]


> искомый путь


а какой же искомый?


syte_ser78   (2005-10-27 08:46:00) [6]

SamProf ©   (26.10.05 21:36)
нифига не понятно что ты хочешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо