Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
6-1122488131
nippo
2005-07-27 22:15
2005.11.13
IMarkupServices::ParseString Method


2-1129303334
Mr.Bob
2005-10-14 19:22
2005.11.13
Помогите определиться с типом базы


2-1129893248
Quattro
2005-10-21 15:14
2005.11.13
Наследник от TStringGrid


14-1130154592
Del_programmer
2005-10-24 15:49
2005.11.13
Другая жизнь...


14-1130067567
alexsis
2005-10-23 15:39
2005.11.13
Rambler &amp; Yandex





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский