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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Подсчёт числа строк в программном проекте

Сообщения:  [1-10]    [11-20]  [21-27] 

 
 автор: Akira   (30.07.2005 в 19:13)   письмо автору
 
   для: isset   (30.07.2005 в 19:12)
 

В самой первой :) Это ед. книга которую мне хватило денег :) Да и наткнулся я на нее случайно.

   
 
 автор: isset   (30.07.2005 в 19:12)   письмо автору
 
   для: Akira   (30.07.2005 в 19:05)
 

В какой книге кстати?)
Это не велосипед, скорее всего scandir использует такие же итераторы

   
 
 автор: isset   (30.07.2005 в 19:11)   письмо автору
 
   для: Akira   (30.07.2005 в 19:05)
 

Рекомендую прочитать про Iterator-ы, можно из того что выше сделать с файлами все что угодно

   
 
 автор: Akira   (30.07.2005 в 19:05)   письмо автору
 
   для: isset   (30.07.2005 в 18:56)
 

А что мешает ее запустить рекурсивно? Помните в книге было написано "Не изобретайте велосипеда" :)) Мне кажеться scandir работает пошустрее.

   
 
 автор: isset   (30.07.2005 в 18:56)   письмо автору
 
   для: Akira   (30.07.2005 в 18:52)
 

Так она же не обходит вложенные директории, только ту которую укажешь, а то что выше написано рекурсивно обходит

   
 
 автор: Akira   (30.07.2005 в 18:52)   письмо автору
 
   для: isset   (30.07.2005 в 18:38)
 

Не очень понятно зачем для 5 версии? Там же есть стандартная scandir().

   
 
 автор: isset   (30.07.2005 в 18:38)   письмо автору
 
   для: Akira   (30.07.2005 в 17:44)
 

Ну вот собсна тоже написал, для PHP5:


<?php
// Немного поправляем итератор FilterIterator 
class myFilterIterator extends FilterIterator {
    private 
$regexp;
    public function 
accept() { 
        return 
preg_match($this->regexp$this->getFilename());
    }
    public function 
regexp($regexp) {
        
$this->regexp=$regexp
    } 

$path "c:/www/"// Начальная директория
$ext  "\.php|\.sql"// Расширения, через |, перед точкой ставим \

// Дальше считаем:
$b = new myFilterIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
$b->regexp('#'.$ext.'$#i');
$count 0;
foreach(
$b as $file) {
    
$content file($file->getPath().'/'.$file);
    
$count += count($content);
    unset(
$content); 
}

// И выводим
echo $count;
?>

   
 
 автор: Akira   (30.07.2005 в 17:44)   письмо автору
 
   для: [CHOL]Scorpion   (29.07.2005 в 21:57)
 

Код рекурсивной фукнции scan_dir, которая обходит директории

<?
function scan_dir($dirname

    GLOBAL 
$extentions$count;
    
# Если путь пустой, то используем текущий каталог 
    
empty($dirname) ? $dirname "*" $dirname $dirname."/*"
    
$dir glob($dirname);
    
// Если директория существует обходим. 
    
if ($dir
    { 
        foreach(
$dir as $filename
        { 
            if (
is_file($filename)) 
            { 
                
// Расширение файла
                
$ext=strrchr($filename".");
                foreach(
$extentions as $exten)
                
// Если файл попадает под маску,то считаем строки
                
if(preg_match($exten$ext))
                {
                    
// Читаем содержимое файла
                    
$content file($filename); 
                    
// Подсчтываем число файлов
                    
$count += count($content);
                    
// Удаляем массив
                    
unset($content);
                }
            } 
            if (
is_dir($filename)) 
            { 
                
scan_dir($filename); 
            } 
        } 
    } 
}  
?>


Код вызова функции scan_dir()

<?
// Имя корневой директории проекта
$dirname ""
// Массив с расширениями файлов, для которых следует подсчитывать
// число строк
$extentions = array("#.php#i"); 
// $extentions = array("#\.cpp#i","#\.h#i");
// Счётчик строк - глобальная переменная
$count 0;
// Вызов функции, осуществляющей рекурсивный спуск по подкаталогам
// корневого каталога
scan_dir($dirname);
// Записываем число строк в переменную $count
file_put_contents("test",$count);
?>

   
 
 автор: [CHOL]Scorpion   (29.07.2005 в 21:57)   письмо автору
 
   для: Akira   (29.07.2005 в 15:32)
 

Внесу свою небольшую лепту в общее дело подсчёта строк в проекте.

Мой пример не основан на рекурсии. Ему чужда кроссплатформенность. Он написан для никс систем, поскольку главное - производительность.


<?

$check 
= array("php","htm","html","tpl");  // массив расширений файлов, в которых будем читать строки

exec ("find ../".$dirname,$files);         // $dirname - имя корневой дирректории хоста в системе, 
                                           //$files - абсолютно все файлы и дирректории с вложением на любом уровне

for ($i=0$i<count($files); $i++){        // обходим массив $files
     
ereg(".+\.(.+)$",$files[$i],$regs);   // пишем какое расширение у очередного файла
     
if (!is_dir($files[$i]) && in_array($regs[1],$check)){   // елси это файл и расширение есть в массиве $check разрешаем считать количество строк
         
$content file($files[$i]);      // читаем файл в массив
     
}
     if (
$content !== False){              // если файл не вернул ошибку, добавляем к общему числу строк, количество строк в файле
         
$total $total count($content);
     }
}

echo (
"В вашем проекте строк: ".$total); 

?>

   
 
 автор: Akira   (29.07.2005 в 15:32)   письмо автору
 
   для: P@Sol   (29.07.2005 в 15:30)
 

Все сложно и отвлекает от работы :) Я творческий человек, работаю на вдохновление (аналог пиво)

   

Сообщения:  [1-10]    [11-20]  [21-27] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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