|
|
|
| Программист набрал команду rm -f c дополнительным параметром – маской. Маска содержит в себе буквы, а также символы ? (один произвольный символ) и * (любая последовательность символов, возможно, пустая). Первая строка входных данных содержит маску, указанную в качестве параметра. Далее идут строки с именами файлов, каждая строка состоит из строчных латинских букв.
Программа должна вывести число – количество оставшихся в каталоге файлов, то есть не удовлетворяющих заданной маске. | |
|
|
|
|
|
|
|
для: Любовь
(13.04.2011 в 14:25)
| | Здесь удобно воспользоваться функцией fnmatch() и отталкиваться от следущего скрипта
<?php
$mask = "i*.*";
$arr = array(".htaccess",
"ajaxupload.js",
"examples.html",
"get.php",
"imgareaselect-deprecated.css",
"index.php",
"index.old.html",
"jquery-1.4.2.min.js",
"jquery.imgareaselect.min.js",
"loading.gif",
"phpinfo.php",
"show.php",
"sitemap.xml",
"style.css",
"task.php",
"test.php",
"upload.php",
"uploadcrop.lib.php",
"xml.xml");
// Подсчитываем количество файлаов, которые не будут
// удовлетворять маске
$total = 0;
for($i = 0; $i < count($arr); $i++)
{
if(!fnmatch($mask, $arr[$i])) $total++;
}
echo "Количество оставшихся файлов - $total";
?>
| PS Тут есть одна неприятность, функция fnmatch() поддерживается только UNIX-подобными операционными системами. Если это критично, сообщите, будем подыскивать другое решение. | |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 14:58)
| | Это критично,выдает ошибку именно не эту функцию, да и у меня не UNIX-подобная операционная система. | |
|
|
|
|
|
|
|
для: Любовь
(13.04.2011 в 18:34)
| | Можно модифицировать скрипт следующим образом
<?php
$mask = "i*.*";
$arr = array(".htaccess",
"ajaxupload.js",
"examples.html",
"get.php",
"imgareaselect-deprecated.css",
"index.php",
"index.old.html",
"jquery-1.4.2.min.js",
"jquery.imgareaselect.min.js",
"loading.gif",
"phpinfo.php",
"show.php",
"sitemap.xml",
"style.css",
"task.php",
"test.php",
"upload.php",
"uploadcrop.lib.php",
"xml.xml");
// Преобразуем маску в регулярное выражение
$mask = preg_quote($mask);
$mask = str_replace('\\*', '(.*?)', $mask);
$mask = str_replace('\\?', '.', $mask);
$pattern = "|^$mask$|i";
// Подсчитываем количество файлов, которые не будут
// удовлетворять маске
$total = 0;
for($i = 0; $i < count($arr); $i++)
{
if(!preg_match($pattern, $arr[$i])) $total++;
}
echo "Количество оставшихся файлов - $total";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 22:43)
| | Что это за массив?
$arr = array(".htaccess",
"ajaxupload.js",
"examples.html",
"get.php",
"imgareaselect-deprecated.css",
"index.php",
"index.old.html",
"jquery-1.4.2.min.js",
"jquery.imgareaselect.min.js",
"loading.gif",
"phpinfo.php",
"show.php",
"sitemap.xml",
"style.css",
"task.php",
"test.php",
"upload.php",
"uploadcrop.lib.php",
"xml.xml"); | |
|
|
|
|
|
|
|
для: Любовь
(14.04.2011 в 07:58)
| | Это массив файлов, так как я не очень понял, про параметры: они относятся к команде rm или это PHP-скрипт будет выполняться в командной строке и он должен принимать параметры. | |
|
|
|
|