|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander Kamotsky 2:463/544.9 21 Mar 2002 00:33:26 To : All Subject : упростить getRelativePath --------------------------------------------------------------------------------
Hаписал функцию для создания относительного пути к файлу или каталогу по двум
абсолютным... Hо мне кажется, что тут можно как-то красиво соптимизировать.
Скорость не критична - интерес чисто академический (учу перл).
=== Cut ===
sub getRelativePath
# returns relative path from one directory or file to another
# params:
# $src - source path
# $dst - destination path
{
my ($src, $dst) = @_;
my (@srcDirs, @dstDirs, @dstFile, $i1, $i2, $result);
@srcDirs = $src =~ m/([^\/]*\/)/g;
@dstDirs = $dst =~ m/([^\/]*\/)/g;
@dstFile = $dst =~ m/[^\/]+$/g;
$i1 = 0;
$i2 = 0;
$result = "";
for (;;)
{
$dir1 = ($i1 <= $#srcDirs)? $srcDirs[$i1] : "";
$dir2 = ($i2 <= $#dstDirs)? $dstDirs[$i2] : "";
last if (!($dir1 eq $dir2));
$i1++;
$i2++;
}
$result = $result. ("../" x ($#srcDirs + 1 - $i1));
for (;$i2 <= $#dstDirs; $i2++)
{
$result = $result.$dstDirs[$i2];
}
if ($#dstFile != -1)
{
$result = $result.$dstFile[0];
}
print $result;
}
$src = "dep120/rus/events/index.htm";
$dst = "dep120/images/e.gif";
print "src: $src\ndst: $dst\n";
getRelativePath ($src, $dst);
=== Cut ===
пример работы:
src: dep120/rus/events/index.htm
dst: dep120/images/e.gif
../../images/e.gif
Что мне не нравится: куча массивов, много переменных вообще, отдельная обработка
имени файла для добавления его в конец...
? :)
Всего доброго, All.
--- #include <"tearline.cpp">
* Origin: (-: "ниждиро йынтарбо" (2:463/544.9)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/28453c991df0.html, оценка из 5, голосов 10
|