Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
ВнизКак получить адрес из суммы двух адресов? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c