Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Как получить адрес из суммы двух адресов?   Найти похожие ветки 

 
SamProf ©   (2005-10-26 21:36) [0]

Есть скажем такой путь:
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  (вроде так......)
А может второй путь вообще будет полным.....
Может есть способ получить искомый путь какимито средствами?
Спасибо!


 
syte_ser78 ©   (2005-10-27 08:46) [1]

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


 
umbra ©   (2005-10-27 10:12) [2]


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


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


 
palva ©   (2005-10-27 11:14) [3]

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

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


 
SamProf ©   (2005-10-27 13:05) [4]


> Я понял так, что второй путь 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;


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


 
Zeqfreed ©   (2005-10-27 14:01) [5]

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 14:22) [6]

Пасибо!



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
14-1130069324
Nikolay M.
2005-10-23 16:08
2005.11.13
Питьевые качества 5-летнего коньяка в алюминиевой фляжке - ?


3-1128068250
KeyC
2005-09-30 12:17
2005.11.13
Direct access to MS Access


2-1129560830
Yurij-7
2005-10-17 18:53
2005.11.13
Аутентификация на локальных базах


2-1129799690
Duffik
2005-10-20 13:14
2005.11.13
Проверка на наличие


2-1129842524
Dmitrich
2005-10-21 01:08
2005.11.13
Наследование Self