Нескладуха с путями к директориям
Есть команда малоопытных начинаюших программистов. Из-за отсутствия строгой руководящей руки, каждый из них, при написании своих частей проекта, в функциях выдачи путей к директориям (типа /home/host/site.com/www) выдает эти пути то с завершающим слешем (/home/host/site.com/www/static/attachment/), то без него (/home/host/site.com/www/static/attachment).
При соединении проекта воедино возникла путаница с путями, то двойной слеш получается (/home/host/site.com/www/static//attachment/), то вообще его нет и путь неправильный (/home/host/site.com/www/staticattachment/).
Функциональность
Написать функцию корректного соединения путей к директориям любого из двух вышеописанных форматов в один правильный, без слеша в конце (чтобы то, что понаписали эти раздолбаи можно было хоть как-то совместить).
Например:
/home/host/site.com/www/ + /static/img = /home/host/site.com/www/static/img
/home/host/site.com/www + static/img/ = /home/host/site.com/www/static/img
data + /static/img/ = data/static/img
(предусмотреть все возможные варианты, чтобы избежать как /home/host/site.com/www//static/img, так и /home/host/site.com/wwwstatic/img).
Параметры функции
Под параметрами функции имеется в виду количество соединяемых воедино путей. Параметров функции может быть два и более, например:
$fullName = concatPath($rootDir, $userDir); $fullName = concatPath($rootDir, $userDir, '/photos'); $fullName = concatPath($rootDir,userDir,'/photos','/docs/',$userId,'reports/');
Рекомендуется для начала наметить возможные ситуации и примерный план обработки.
Дополнительные задания на расширение сознания
- Ответить на вопрос: почему требуется выдавать результат без завершающего слеша, какая дополнительная возможность, не указанная в задании, появляется?
- Оказалось, что имеются ситуации, когда другие функции в проекте выдают не один путь, а их индексируемый массив 0..N. Адаптировать функцию, помимо вышеописанной функциональности, к приему массива путей в качестве единственного параметра.
- Функции студента Васи, который вообще работал дома по ночам, выдают не индексированный массив путей, а ассоциативный (типа "name"=>"value") — еще раз адаптировать.
Данную задачу можно решать на любом языке программирования, в котором она имеет смысл и ненулевую вероятность практического возникновения. Разумеется, с учётом возможностей языка. У автора она решена на PHP.
31.07.2010 | 09:46
