批處理及PHP編寫目錄上的統計檔案行數及個數

來源:互聯網
上載者:User
批處理及PHP編寫目錄下的統計檔案行數及個數

?? ??今天要統計下寫的代碼的行數(去除空行及注釋)及目錄下的檔案總數。首先想到的是一個批處理命令,因為簡單而且高效,於是去網上找了下批命令的教程,寫了個簡單的批命令處理:?

??????

@Rem: 本批命令用來計算某個路徑下的總檔案個數,及總行數。行數的計算不算空行@Rem: author: 肖肖 [email protected]@echo ****************************************************************@echo off@echo 使用說明:@echo 1、更改要計算的路徑:將filePath的路徑更改為自己的需要的路徑。@echo 2、更改統計的檔案尾碼,如果需要統計所有檔案則將fileExt設定為*,如果只需要統計php檔案則將該變數指定為*.php@echo ****************************************************************@set fileExt=*.php@set filePath=D:\PHPAPP\phpwindframework\wind@setlocal enabledelayedexpansion@set filenum=0@set totalnum=0@for /r %filePath% %%i in (%fileExt%) do (@set linenum=0 & @set /a filenum+=1 & @echo %%i & (@for /f "usebackq" %%b in (%%i) do @set /a linenum+=1) & @echo 行數:!linenum! & @set /a totalnum+=linenum)@echo 總行數: %totalnum%行@echo 總檔案數: %filenum%@pause

?

?? ? ?具體的命令意思我就不解釋了,特別說明下:

?? 我在計算每個檔案的行數的時候,就是輸出不了linenum,後來經過詢問尋找,原來是延遲的問題,於是在開頭加了命令setlocal enabledelayedexpansion來開啟延遲,同時輸出採用@echo !linenum!的 這樣!!的方式輸出。

該批命令可以指定統計處我指定目錄下的檔案個數(可以指定統計的檔案的類型),及總行數(去除了空行)。

但是對於代碼統計來說,去除空行及注釋的統計才是理想的狀態。相對於批命令還是PHP來的給力,所以寫了一個PHP版本的統計:

???

/** * @author xiaoxia xu <[email protected]> 2011-1-12 * @link http://www.phpwind.com * @copyright Copyright © 2003-2110 phpwind.com * @license * 統計目錄下的檔案行數及總檔案數··去除注釋 */$fileExt = ".php";$filePath = "D:\PHPAPP\phpwindframework\wind";if (!is_dir($filePath)) exit('Path error!');list($totalnum, $linenum, $filenum) = readGiveDir($filePath, $fileExt);echo "*************************************************************\r\n";echo "總行數: " . $totalnum . "\r\n";echo "總有效行數: " . $linenum . "\r\n";echo '總檔案個數:' . $filenum;function readGiveDir($dir, $fileExt) {$totalnum = 0;$linenum = 0;$filenum = 0;if ($dh = opendir($dir)) {        while (($file = readdir($dh)) !== false) {if (in_array($file, array(".", "..", '.svn'))) continue;if (is_dir($dir . '/' . $file)) {list($num1, $num2, $num3) = readGiveDir($dir . '/' . $file, $fileExt);$totalnum += $num1;$linenum += $num2;$filenum += $num3;} else {if (strrchr($file, '.') == $fileExt) {list($num1, $num2) = readfiles($dir . '/' . $file);$totalnum += $num1;$linenum += $num2;$filenum ++;continue;}}        }        closedir($dh);    } else {echo 'open dir <' . $dir . '> error!' . "\r";}return array($totalnum, $linenum, $filenum);}function readfiles($file) {echo $file . "\r\n";    //$p = php_strip_whitespace($file);$str = file($file);$linenum = 0;foreach ($str as $value) {if (skip(trim($value))) continue;$linenum ++;}$totalnum = count(file($file));echo '行數:' . $totalnum . "\r\n";echo '有效行數:' . $linenum . "\r\n";return array($totalnum, $linenum);}function skip($string) {if ($string == '') return true;$array = array("*", "/*", "//", "#");foreach ($array as $tag) {if (strpos($string, $tag) === 0) return true;}return false;}

?

?

?? 代碼也挺簡單,這邊就不做解釋了,其中我處理跳過空行和注釋行的是在skip這個函數中,這裡聲明了一個數組,用來聲明我可以過濾的標籤(可以看到這裡都是PHP中的注釋標籤),我在尋找的時候只要尋找是否這些標籤是在最前面的位置即可。但是這樣會存在一個問題,當My Code出現不規範的格式化的時候,可能出現代碼中的*乘號進行了換行到了新的一行的開始位置,那也會被過濾掉。但總的來說··這兩種統計都滿足了我的需求。

Tips: PHP的該方法,放在命令列下運行效果更佳。~

?

?? 第一次覺得,當我遇到問題的時候,真的用自己的所學做了一些小便利的工具提供給自己使用。哈哈哈···紀念下~~~

?

?? 希望你有個好心情~~~

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.