![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить адрес из суммы двух адресов? [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)
нифига не понятно что ты хочешь.