Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление файлов по маске - подсчитать количество оставшихся файлов
 
 автор: Любовь   (13.04.2011 в 14:25)   письмо автору
 
 

Программист набрал команду rm -f c дополнительным параметром – маской. Маска содержит в себе буквы, а также символы ? (один произвольный символ) и * (любая последовательность символов, возможно, пустая). Первая строка входных данных содержит маску, указанную в качестве параметра. Далее идут строки с именами файлов, каждая строка состоит из строчных латинских букв.
Программа должна вывести число – количество оставшихся в каталоге файлов, то есть не удовлетворяющих заданной маске.

  Ответить  
 
 автор: cheops   (13.04.2011 в 14:58)   письмо автору
 
   для: Любовь   (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-подобными операционными системами. Если это критично, сообщите, будем подыскивать другое решение.

  Ответить  
 
 автор: Любовь   (13.04.2011 в 18:34)   письмо автору
 
   для: cheops   (13.04.2011 в 14:58)
 

Это критично,выдает ошибку именно не эту функцию, да и у меня не UNIX-подобная операционная система.

  Ответить  
 
 автор: cheops   (13.04.2011 в 22:43)   письмо автору
 
   для: Любовь   (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";
?>

  Ответить  
 
 автор: Любовь   (14.04.2011 в 07:58)   письмо автору
 
   для: 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");

  Ответить  
 
 автор: cheops   (14.04.2011 в 09:16)   письмо автору
 
   для: Любовь   (14.04.2011 в 07:58)
 

Это массив файлов, так как я не очень понял, про параметры: они относятся к команде rm или это PHP-скрипт будет выполняться в командной строке и он должен принимать параметры.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования