CLOC

CLOC 
Преброяване реда код

Преглед http://cloc.sourceforge.net/up.gif

cloc брои празни редове, коментират линии, и физически линии на изходния код в много езици за програмиране . Като се има предвид две версии на база код, cloc може да изчисли различия в празно, коментира, и изходните линии. Тя е написана изцяло в Perl, без зависимости извън стандартната дистрибуция на Perl v5.6 и по-висока (код от някои външни модули се вградени в cloc ) и така е доста преносим. cloc е известно, че се движат по много вкусове на Linux, FreeBSD, NetBSD, OpenBSD, Mac OS X, AIX, HP-UX, Solaris, IRIX, Z / OS и Windows. (За да стартирате Perl код версия на cloc на един Windows се нуждае от ActiveState Perl 5.6.1 или по-висока, Strawberry Perl , Cygwinили MobaXTerm с Perl плъг-ин инсталиран. Като алтернатива може да се използва двоичен Windows на cloc генерирани с perl2exe да тече На Windows компютри, които нямат нито Perl нито Cygwin.)

cloc съдържа код от Дейвид Уилър SLOCCount , Damian Conway и Perl модул Абигейл RegExp :: Обща , Perl модул Sean M. Бърк Win32 :: Autoglob , и Perl модул Tye Маккуин Алгоритъм :: Diff . Език мащабни фактори са извлечени от Мейс Consulting, LLC уеб сайт http://softwareestimator.com/IndustryData2.htm .

Разрешително http://cloc.sourceforge.net/up.gif
cloc се разпространява под GNU General Public License, v2 , с изключение на частите, които са копирани от други източници. Код копирани от RegExp :: Common, Win32 :: Autoglob и алгоритъм :: Diff Perl модули е предмет на Artistic License .

Защо Използвайте cloc? http://cloc.sourceforge.net/up.gif

cloc има много функции, които го правят лесен за използване, цялостно, разтегателен, и преносими:

  • Съществува като единна, самостоятелна файл, който изисква минимални усилия инсталация --- просто да изтеглите файла и го стартирате.
  • Може да чете езикови коментар определения от файл и по този начин потенциално работят с компютърни езици, които все още не съществуват.
  • Позволява резултати от множество писти да се сумират по език и по проект.
  • Може да даде резултати в най-различни формати: обикновен текст, SQL, XML, YAML, разделени със запетая стойности.
  • Може да разчита код в рамките на компресирани архиви (катран топки, ZIP файлове, файлове за уши Java.).
  • Има множество опции за отстраняване на неизправности.
  • Дръжки файлове и директории имена с пространства и други необичайни знаци.
  • Все още няма зависимости извън стандартното разпределение на Perl.
  • Работи на Linux, FreeBSD, NetBSD, OpenBSD, Mac OS X, AIX, HP-UX, Solaris, IRIX, и Z / OS системи, които имат Perl 5.6 или по-висока. Версията източник работи на Windows или с ActiveState Perl, Strawberry Perl, Cygwin или MobaXTerm + Perl плъгин. Като алтернатива на Windows може да стартирате Windows двоичен който няма зависимости.

Други броячи http://cloc.sourceforge.net/up.gif

Ако cloc не отговарят на вашите нужди, тук са други свободно достъпни гишета за обсъждане на:

Други модели:

RegExp :: Common, Digest :: MD5, Win32 :: Autoglob, Алгоритъм :: Diff

Въпреки cloc не се нуждае от Perl модули извън тези, намерени в стандартната дистрибуция, cloc не разчита на няколко външни модули. Код от три от тези външни модули - RegExp :: Common, Win32 :: Autoglob и алгоритъм :: Diff - е вградена в cloc. Четвъртият модул, Digest :: MD5, се използва само, ако тя е достъпна. Ако cloc намира RegExp :: Общ или Алгоритъм :: Diff инсталирано локално тя ще използва тези инсталации. Ако това не стане, ще се инсталира cloc частите на RegExp :: Обща и / или алгоритъм: Diff тя трябва да временни директории, които са създадени в началото на cloc тичам след това се отстранява, когато изпълнението е завършено. Необходимата кода от RegExp :: Общата v2.120 и алгоритъм :: Diff v1.1902 са вградени в рамките на cloc изходния код (виж подпрограми Install_Regexp_Common() и Install_Algorithm_Diff() ).Необходими са само три реда от Win32 :: Autoglob и те са включени директно в cloc.

Освен това, cloc ще използва Digest :: MD5 да валидира уникалност сред входни файлове, ако Digest :: MD5 е инсталиран локално. Ако не се намери Digest :: MD5 Проверете файла уникалност се пропуска.
Двоичните Windows е построена на един компютър, който има както RegExp :: Обща и Digest :: MD5 инсталира локално.

Изграждане на Windows изпълними http://cloc.sourceforge.net/up.gif

Изтегляне Площта на SourceForge съдържа два Windows изпълними файлове компилирани от сорс кода на Perl. Подразбиране Windows мишката е построена с perl2exeна 32 битов Windows XP компютър. Една малка промяна беше направена в cloc изходния код, преди да премине тя да perl2exe; линии 87 и 88 са некоментирана:

 85 # разкоментирайте следващите две линии, когато се изграждат Windows изпълним с perl2exe
86 # или ако работи на една система, която вече има RegExp :: Common.
87 # използване RegExp :: Общата;
88 # $ HAVE_Rexexp_Common = 1;

Една алтернатива на създаването на изпълним Windows с perl2exe е безплатно на Strawberry Perl разпределение плюс PAR :: Пакър модул. Стъпките са на първо инсталирате Strawberry Perl след техните инструкции. След това отворете командния ред, известен още като един прозорец DOS и инсталирате модула за PAR :: Пакър. И накрая, да се позове на новоинсталираните п.п. командата с cloc сос код, за да се създаде Exe файл.:

 C:> Perl-MCPAN-д черупка
CPAN> инсталирате PAR :: Пакър
CPAN> изход
C:> п.п. cloc-1.60.pl

Вариация на горното е, ако сте инсталирали преносим версия на Strawberry Perl, ще трябва да тичам portableshell.bat първо да зададете правилно вашата среда. The Strawberry Перлата получен изпълним по изтегляне района на SourceForge е създаден с преносима версия на 32-битов Windows XP компютър.

Basic ползване http://cloc.sourceforge.net/up.gif

cloc е програма за команден ред, който отнема имена на файлове, директория, и / или да архивирате като входове. Ето един пример за работещ cloc срещу разпространението източник v5.10.0 на Perl:

промпт> cloc Perl-5.10.0.tar.gz
       4076 текстови файлове.
       3883 уникални файлове.
       1521 файл игнорирани.
     
http://cloc.sourceforge.net V 1.50 T = 12,0 сек (209.2 файлове / с, 70472.1 линии / сек)   
-------------------------------------------------- -----------------------------   
Езикови                         файлове         празен        коментар       код   
-------------------------------------------------- -----------------------------   
Perl                            2052            110356       130018        292281   
C                                135             18718        22862        140483   
C / C + + Header                 147              7650        12093         44042   
Bourne Shell                     116              3402         5789         36882   
Lisp                               1               684         2242          7515   
направи                            7               498          473          2044   
C + +                             10               312          277          2000   
XML                               26               231            0          1972   
Yacc                               2               128           97          1549   
YAML                               2                 2            0           489   
DOS Batch                         11                85           50           322   
HTML                               1                19            2            98   
-------------------------------------------------- -----------------------------   
SUM:                            2510            142085       173903        529677   
-------------------------------------------------- -----------------------------  

За да стартирате cloc на Windows компютри, човек трябва първо да се отвори команден (известен още като DOS) прозорец и се позове cloc.exe от командния ред там.

Опции http://cloc.sourceforge.net/up.gif

 промпт> cloc

  Употреба: cloc [опции] <file(s)/dir(s)> | <set 1> <set 2> | <report Files>

  Граф, или изчисли различия, физически линии на изходния код в
дадени файлове (може да бъде архиви като компресирани архиви или пощенски файлове)
и / или рекурсивно долу дадените директории.

  Опции за въвеждане
- Екстракт-с = <cmd> Тази опция е необходима само ако не е в състояние cloc
да разбера как да извлечете съдържанието на
Входният файл (а) сам по себе си.
Използвайте <cmd> да извлечете двоични архивни файлове (напр.:
. Tar.gz,. ZIP,. Z).  Използвайте буквално '> ФАЙЛ <", както е
дубльор за действителния файл (а), за да бъде
екстрахира.  Например, за да се брои реда код
в входни файлове
GCC-4.2.tar.gz Perl-5.8.8.tar.gz
на Unix ползване
- Извличане-с = 'GZIP-DC> FILE <| катран XF - "
или, ако имате GNU катран,
- Екстракт-с = 'катран zxf> ПОДАВА <"
и за използването на Windows, например:
- Извличане-с = "\" C: \ Program Files \ WinZip \ WinZip32.exe \ "-д-о> FILE <."
(Ако WinZip е инсталиран там).
- Списък-файл = <file> Вземете списъка на файл и / или имена на директориите, за да
процес от <file> който има един файл / директория
име на ред.  Вижте също - изключва списък-файл.
- Уникод Проверка на бинарни файлове, за да видите, ако те съдържат Unicode
разширена ASCII текст.  Това води до изпълнение на
пуснете noticably.

  Опции за преработка
- Autoconf Count във файлове (както е преработен от GNU Autoconf) на.
призната езици.
- По-файл доклад с резултатите за всеки файл източник натъкнали.
- По-файл-по-Ланг доклад с резултатите за всеки файл източник срещнали
в допълнение към отчитане по език.
- разл <set1> <set2> Compute разлики в код и коментари между
файл (а) източник на <set1> и <set2>.  Входовете
може да бъде двойки на файлове, директории, или архиви.
Използвайте - разл-подравняване, за да генерира списък, който показва
кой файл двойки, където сравняват.  Виж също
- Игнорира случай, - игнорира-празно.
- Разл-таймаут <N> Игнорирай файлове, които отнемат повече от <N> секунди
за обработка.  По подразбиране е 10 секунди.
(Големи файлове с много повтарящи се линии могат да причинят
Алгоритъм :: Diff :: sdiff (), за да отнеме часове.)
- Последващи връзки [Unix само] Следвайте символични връзки към директории
(SYM линкове към файлове, винаги са следвани).
- Сила-Lang = <lang> [, <ext>]
Обработете всички файлове, които имат разширение <ext>
с брояч за език <lang>.  За
Например, за да разчитам на всички. F файлове с
Fortran 90 брояч (който очаква файлове
завършва с. F90), вместо по подразбиране Fortran 77
брояч, използване
- Сила-Lang = "Fortran 90", е
Ако <ext> е пропуснато, всеки файл ще бъдат преброени
с <lang> тезгяха.  Тази опция може да бъде
посочени няколко пъти (но това е само
полезно, когато <ext> се дава всеки път).
Вижте също - скрипт-Ланг, - Lang-не-вътр.
- Сила-Lang-Def = <file> Load обработка език филтри от <file>,
след това използвайте тези филтри вместо вградената
филтри.  Забележка: езици, които картата за същото
файлово разширение (например:
MATLAB / Objective C / заушка;  Pascal / PHP;
Lisp / OpenCL) ще бъдат игнорирани, тъй като те изискват
допълнителна обработка, която не се изразява в
езикови файлове с дефиниции.  Употреба - за четене Lang-Def
да се определят нови езикови филтри, без да замества
вграден филтър (виж също - пиша-Ланг дефиниция).
- Игнорира-празно Игнорирай хоризонтално бяло пространство, когато се сравняват файлове
с - разл.  Вижте също - игнорира случай.
- Игнорира случай Игнорирай промени в случай;  разгледа горния и долния
букви еквивалент при сравняването на файлове с
- Разл.  Вижте също - игнорира-празно.
- Ланг-не-EXT = <lang> граф файлове без разширения с помощта на <lang>
брояч.  Тази опция отменя вътрешна логика
за файлове без разширения (където такива файлове
се проверяват срещу познати езици за писане на скриптове
чрез разглеждане на първа линия за #!).  Виж също
- Сила-Ланг, - скрипт-Ланг.
- макс-файл с размер = <MB> Skip файлове по-големи от <MB> мегабайта, когато
преминаващи директории.  По подразбиране, <MB> = 100.
изискване памет cloc е около двадесет пъти
по-голям от най-големия файл, така работи с
файлове по-големи от 100 MB на компютър с по-малко
от 2 GB памет ще причини проблеми. 
Забележка: тази проверка не се прилага по отношение на досиетата
изрично премина като аргументи на командния ред.
- Четене двоични файлове Процес двоични файлове в допълнение към текстовите файлове.
Това обикновено е лоша идея и трябва да бъде само
опит с текстови файлове, които са вградени
двоични данни.
- Четене Lang-Def = <file> Заредете нови филтри за обработка на език от <file>
и да ги обедините с тези, които вече е известно, че cloc. 
Ако <file> дефинира език cloc вече знае
за, определяне cloc ще имат предимство. 
Употреба - сила-Ланг дефиниция на над-езда cloc е
определения (вж. също - пиша-Ланг дефиниция).
- Скрипт-Lang = <lang>, <S> Process всички файлове, които се позовават на <S> като #!
скриптов език с тезгяха за език
<lang>.  Така например, файлове, които започват с
#! / Usr/local/bin/perl5.8.8
ще се брои заедно с Perl тезгяха с помощта на
- Скрипт-Lang = Perl, perl5.8.8
Името на езика е нечувствителен, но
име на скрипт език изпълним, <S>,
трябва да има право делото.  Тази опция може да бъде
посочено няколко пъти.  Вижте също - сила-Ланг,
- Ланг-не-вътр.
- Sdir = <dir> Използвайте <dir> като директория нулата вместо
отдаване под наем File :: Temp избра мястото.  Файлове
писмено на това място не се отстранява при
на края на пистата (тъй като те са с Файл :: температура).
- Пропуснете-уникалност Пропусни Проверете файла уникалност.  Това ще даде
по-добро бързодействие за сметка на броене
файлове с идентични съдържание няколко пъти
(Ако съществуват такива дублирания).
- Стандартния вход име = <file> Дайте име на файл, за да използвате, за да се определи езика
за стандартния вход.
- Дълбаем коментари = <ext> За всеки файл, преработени, пишете на тока
указател версия на файла, който има празно
линии и коментари отстранени.  Името на всяка
съблякоха файл е името на оригиналния файл с
. <ext> Приложена към него.  Той се записва в
текущата директория, освен ако не - оригинал-Dir е включен.
- Оригинал-реж. [Само ефективна в комбинация с
- Дълбаем коментари] Напишете съблечени файлове
в същата директория, както и оригиналните файлове.
- Сума доклади Входни аргументи са отчетни файлове по-рано
създаден с опцията - доклад-файл.  Изобретенията
кумулативен набор от резултати, съдържащи
сума от данни от отделните файлове в доклада.
- Unix Override автоматично откриване на операционната система
логика и бягай в режим на UNIX.  Виж също
- прозорци, - шоу-OS.
- Прозорци OVERRIDE автоматично откриване на операционната система
логика и бягай в режим на Microsoft Windows.
Вижте също - UNIX, - шоу-OS.

  Филтър Options
- Да изключи-реж. = <D1> [, D2,] Изключи дадените разделени със запетая директории
D1, D2, D3, и така нататък, да бъдат сканирани.  За
Например -. изключи-реж. = кеш, тест ще пропусне
всички файлове, които имат /. кеш / или / тест /, като част
на пътя им.
Directories именувани BZR.,. Автобиографии,. Hg,. Git, и
. SVN винаги са изключени.
- Да изключи-EXT = <ext1> [, <ext2> [...]]
Не разчитайте на файлове с даденото име на файла
разширения.
- Да изключи-Lang = <L1> [, L2,] Изключи дадените разделени със запетая езици
L1, L2, L3, и така нататък, да бъдат преброени.
- Изключва списък-файл = <file> Игнорирай файлове и / или директории, чиито имена
се появи в <file>.  <file> трябва да има един запис
на ред.  Относителни имена път ще бъдат решени
започвайки от директорията, в която е cloc
потърсена.  Вижте също - списък-файл.
- Мач-г = <regex> разчитате само файлове в директории, съответстващи на Perl
регулярен израз.  Например
- Мач-г = '/ (SRC | включват) / "
отчита само файловете в директории, съдържащи
/ SRC / или / включва /.
- Не-мач-г = <regex> граф всички файлове с изключение на тези в директории
съвпадение на RegEx Perl.
- Мач-F = <regex> брои Само файлове, чийто basenames съвпада с Perl
регулярен израз.  Например
- Мач-F = '^ [Ww] idget "
отчита само файлове, които започват с Widget или джаджа.
- Не-мач-F = <regex> граф всички файлове с изключение на тези, чиято basenames
съвпада с регулярен израз Perl.
- Пропуснете-архив = <regex> Игнорирай файлове, които завършват с дадената Perl редовната
изразяване.  Например, ако даден
- Пропуснете-архив = '(цип | катран ((GZ | Z | bz2 | XZ | 7z)).?) "
кодът ще пропуснете файлове, които завършват с. цип,
. Катран,. Tar.gz,. Tar.Z,. Tar.bz2,. Tar.xz, и
. Tar.7z.
- Пропуснете-печеливша скрит На Windows, прескача скритите файлове.

  Опции за отстраняване на грешки
- Категоризирани = <file> Запаметяване на имена на файлове, за да категоризират <file>.
- Брои = <file> Запаметяване на имена на преработени изходните файлове да <file>.
- Разл-подравняване = <file> Пишете <file> списък на файлове и файлови двойки
, който показва кои файлове са били добавени, отстрани, и / или
сравнение по време на работа с - разл.  Този ключ
Сили - режим на разл.
- Извеждане на информация за тази употреба и излизане.
- Намерени = <file> Запаметяване на имена на всеки файл е установено, че <file>.
- Игнорира = <file> Запаметяване на имена на файлове и игнорирани причината те
бяха игнорирани да <file>.
- Print-филтър-етапи Печат на STDOUT обработват изходния код преди и
след като се прилага всеки филтър.
- Шоу-вътр [= <ext>] Print информация за всички известни (или просто
дадено) файлови разширения и излизане.
- Шоу-Lang [= <lang>] Print информация за всички известни (или просто
дадено) езици и излизане.
- Шоу-OS Печат стойността на режима на операционна система
и излизане.  Вижте също - UNIX, - прозорци.
-V [= <n>] Verbose превключвател (опция числова стойност).
- Версия за печат версията на тази програма и да излезете.
- Запис Lang-Def = <file> Пише да <file> филтри за обработка на език
след това излиза.  Полезни като първа стъпка към създаване
обичай езикови определения (вж. също
- Сила-Ланг дефиниция, - четене Ланг дефиниция).

  Изходни Опции
- 3 Print трето поколение изход език.
(Тази опция може да доведе до доклад сумиране, за да фалират
ако някои доклади са били произведени с тази опция
докато други са произведени без него.)
- Напредък ставка = <n> Покажи актуализация напредък след всеки <n> файлове са
обработват (по подразбиране <n> = 100).  Задайте <n> от 0 до
потискат продукцията напредък (полезен при пренасочване
изход към STDOUT).
- тихо Потиснете всички информационни съобщения, с изключение на
окончателния доклад.
- Доклад-файл = <file> Напиши резултатите да <file> вместо на стандартния изход.
- Вън = <file> Синоним за - докладва-файл = <file>.
- CSV Напиши резултатите като разделени със запетая стойности.
- CSV-разделител = <C> Използвайте <C> характер като разделител за запетая
разделени файлове, вместо.  Този ключ сили
- CSV да бъде.
- SQL = <file> Напиши резултати като SQL създават и вмъкват отчети
който може да се чете от базата данни на програмата като
SQLite.  Ако <file> е -, изход се изпраща към STDOUT.
- SQL-проект = <NAME> Използвайте име като идентификатор на проект за
текущия план.  Само валидна с опцията - SQL.
- SQL-добавите Append SQL вмъкнете отчети за даден файл
от - SQL и не генерират създаването на маса
отчети.  Само валидна с опцията - SQL.
- Сума, по един за обикновени текстови съобщения, да покажем на SUM: изходна линия
дори ако само един входен файл се обработва.
- XML ​​Напиши резултатите в XML.
- XSL = <file> Референтен <file> като XSL стилове в рамките на
изхода XML.  Ако <file> е 1 (един цифров),
пише стилове по подразбиране, cloc.xsl (или
cloc-diff.xsl ако - да се дава разл).
Този ключ сили - XML ​​нататък.
- YAML Напиши резултатите в YAML.

Признати Езици http://cloc.sourceforge.net/up.gif


подкани> cloc - шоу-Lang
     
ABAP                     (ABAP)
ActionScript             (м.н.)   
Ада                      (Ada, ADB, обяви, подложка)   
Адсон / IDSM             (Адсон)   
Обилни                   (достатъчно, dofile, стартиране)   
Ant                      (build.xml)   
Apex Trigger             (спусъка)   
Arduino Sketch           (Ино, PDE)   
ASP                      (ASA, ASP)   
ASP.Net                  (asax, ascx, ASMX, ASPX, довереник, магистър, карта на сайта, webinfo)   
Събрание                 (ASM, S, S)   
AutoHotkey               (AHK)   
AWK                      (AWK)   
Bourne Again Shell       (Bash)   
Bourne Shell             (ш)   
C                        (C, ЕО, PGC)   
C Shell                  (CSH, tcsh)   
C #                      (CS)   
C + +                    (C, CC, CPP, Cxx, PCC)   
C / C + + Header         (H, H, HH, ВЕЦ)   
CCS                      (CCS)   
Clojure                  (CLJ)   
ClojureScript            (cljs)   
CMake                    (cmake, CMakeLists.txt)   
COBOL                    (CBL, CBL, кочан, COB)   
CoffeeScript             (кафе)   
ColdFusion               (CFM)   
ColdFusion CFScript      (CFC)   
CSS                      (CSS)   
Cython                   (дарохранителница)   
D                        (D)   
DAL                      (га)   
Dart                     (стрела)   
DOS Batch                (бухалка, BAT)   
DTD                      (DTD)   
Erlang                   (Ерл, HRL)   
Очаквайте                (EXP)   
Focus                    (focexec)   
Fortran 77               (F, F, F77, F77, PFO)   
Fortran 90               (F90, F90)   
Fortran 95               (F95, F95)   
Go                       (Отиди)   
Groovy                   (Гант, грууви)   
Haskell                  (ХС, лява скала)   
HTML                     (HTM, HTML)   
IDL                      (IDL, про)   
InstallShield            (ISM)   
Java                     (Java)   
Javascript               (JS)   
JavaServer Faces         (JSF, XHTML)   
JCL                      (JCL)   
JSP                      (JSP)   
Кърмит                   (KSC)   
Korn Shell               (KSH)   
ПО-МАЛКО                 (по-малко)   
Lex                      (л)   
Lisp                     (EL, JL, фъфлене, LSP, SC, SCM)   
Lisp / OpenCL            (CL)   
Livelink OScript         (oscript)   
Lua                      (Lua)   
m4                       (променлив ток, m4)   
марка                    (ч., gnumakefile, Gnumakefile, Makefile, Makefile)   
MATLAB                   (m)   
Maven                    (POM, pom.xml)   
Modula3                  (i3, IG, m3, мг)   
MSBuild скриптове        (csproj, wdproj)   
Паротит                  (депутати, m)   
MXML                     (MXML)   
Нант скриптове           (строителство)   
Nastran DMAP             (DMAP)   
Цел C                    (т)   
Objective C + +          (mm)   
OCaml                    (мл, MLI, тЦ mly)   
Oracle Forms             (FMT)   
Oracle Reports           (REX)   
Pascal                   (DPR, р, PAS, PP)   
Patran Command Language  (PCL, SES)   

Perl                     (Perl, PL, PL, Пи Ел Ейч, PLX, ч.)   
PHP                      (PHP, php3, PHP4, PHP5)   
PHP / Pascal             (с ДДС)   
Pig Latin                (прасе)   
PowerShell               (ps1)   
Python                   (пг)   
QML                      (QML)   
Razor                    (cshtml)   
Rexx                     (REXX)   
Ruby                     (RB)   
Ruby HTML                (rhtml)   
Rust                     (РС)   
SASS                     (Sass, SCSS)   
Scala                    (Скала)   
SED                      (SED), които   
SKILL                    (Илинойс)   
SKILL + +                (ILS)   
Smarty                   (Smarty, ГО)   
Softbridge Basic         (SBL, SBL)   
SQL                      (psql, SQL, SQL)   
SQL Data                 (data.sql)   
SQLсъхранявана дейността (spc.sql, spoc.sql, sproc.sql, udf.sql)   
Tcl / Tk                 (ИТК, TCL, TK)   
Teamcenter Def           (Def)   
Teamcenter срещна        (Met)   
Teamcenter MTH           (MTH)   
Вала                     (Вала)   
Вала Header              (Vapi)   
Verilog-SystemVerilog    (SV, SVH, V)   
VHDL                     (VHD, VHD, VHDL, VHDL)   
Vim скрипт               (Вим)   
Visual Basic             (БАН, Център за либерални стратегии, CTL, DSR, FRM, VB, VB, VBA, VBA, VBS, VBS)   
Visualforce компонент    (компонент)   
Visualforce Page         (страница)   
XAML                     (XAML)   
XML                      (XML, XML)   
XSD                      (XSD, XSD)   
XSLT                     (XSL, XSL, XSLT, XSLT)   
Yacc                     (Y)   
YAML                     (YAML, yml)

Горният списък може да се персонализира чрез езикови четене определения от файл с --read-lang-def или --force-lang-def опции.
Три файлови разширения имат множество езикови съответствия:

  • .m файлове могат да бъдат MATLAB, паротит или Objective C
  • .inc файлове могат да бъдат PHP или Pascal
  • .cl файлове могат да бъдат Lisp или OpenCL

cloc има подпрограми, които се опитват да се идентифицират правилния език въз основа на съдържанието на файла за тези специални случаи. Точност идентификация Language е функция на колко код файлът съдържа;. М файлове само с една или две линии, например, рядко разполагат с достатъчно информация, за да се прави разлика между правилно MATLAB, паротит или Цел C.

Как работи http://cloc.sourceforge.net/up.gif

метод cloc от функционирането прилича SLOCCount е: Първо, създаване на списък с файлове, за да разгледа. След това се опита да определи дали или не са намерени файлове съдържат призната компютърен език изходен код. И накрая, за файлове, определени като изходни файлове, да се позове на специфичните за езика съчетания да брои броя на изходните линии.
По-подробно описание:

  • Ако входния файл е архив (като. Tar.gz или. Компресиран файл), създайте временна директория и разширяване на архива там с помощта на система за повикване на подходяща основната полезност (катран, bzip2, разархивирайте и т.н.), след това се добавят тази временна директория като един от входовете.(Това работи по-надеждно от Unix, отколкото на Windows.)
  • Използвайте File :: Намери рекурсивно да се спускат на входните директории и да направи списък с имена на кандидат файлове. Игнориране на двукомпонентни и нулев размер файлове.
  • Уверете се, че файловете в списъка с кандидат имат уникално съдържание (първо чрез сравняване на размера на файла, след това за подобно по размер файлове, да сравните MD5 хешове на съдържанието на файла с Digest :: MD5).
  • Сканиране списъка на кандидат файл за файлови разширения, които cloc сътрудници с езици за програмиране (виж --show-lang и --show-ext опции). Файлове, които са класифицирани като мач, съдържащ изходния код за този език. Всеки файл, без един разширения се отваря и своя първи ред се чете, за да видите, ако това е Unix скрипт (нещо, което започва с #! ). Ако това е скрипт, файлът е класифицирана от които скриптов език (ако езикът се признава). Ако файлът не притежава призната удължаване или не е recognzied скриптов език, файлът се игнорира.
  • Всички останали файлове в списъка с кандидат-вече трябва да са изходните файлове за известни езици за програмиране. За всеки от тези файлове:
    • Прочетете целия файл в паметта.
    • Преброяване на броя на линиите (L = оригинал).
    • Премахване на празни редове, а след това се брои отново (L = non_blank).
    • Loop през коментар филтрите, определени за този език. (Например, C + + има два филтъра: (1) премахване на линии, които започват с опция за интервал, последвани от // и (2) премахване на текст между /* и */ ) Нанесете всеки филтър към кода, за да премахнете коментари. Преброяване на ляво над линии (= Lкод).
    • Спестявате графовете за този език: 
      празни редове = L оригинален - L non_blank 
      коментар линии = L оригинален - L non_blank - L код 
      кодови линии = L код

Опциите променят алгоритъма леко. Най --read-lang-def опцията например позволява на потребителя да чете определения на коментар филтри, известни файлови разширения, както и известни скриптови езици от файл. Кодът за тази опция се обработва и между стъпки 2 и 3.

Advanced ползване http://cloc.sourceforge.net/up.gif

Премахнете Коментари от Source Code http://cloc.sourceforge.net/up.gif

Как да ви кажа, ако cloc правилно идентифицира коментари? Един от начините да се убедите сами cloc прави правилното нещо е да се използва неговата - дълбаем коментари опция за отстраняване на коментари и празни редове от файл, след това сравняват олекотена файловете на оригинали.

Нека се опитаме това с SQLite сливането , а C файл, съдържащ всички необходими код за изграждане на SQLite библиотека заедно с заглавния файл:

промпт> катран zxf SQLite-сбор-3.5.6.tar.gz    
промпт> CD SQLite-3.5.6 /
   промпт> cloc - дълбаем коментари = NC sqlite.c
          Един текстов файл.
          Един уникален файл.                                 
Написа sqlite3.c.nc
          0 файл игнорирани.
     
http://cloc.sourceforge.net V 1.03 T = 1.0 сек (1.0 файлове / с, 82895.0 линии / сек)   
-------------------------------------------------- -----------------------------   
Езикови файлове празен коментар код мащаб третото поколение.  екв   
-------------------------------------------------- -----------------------------   
C 1 5167 26827 50901 х 0.77 = 39193.77   
-------------------------------------------------- -----------------------------  

Аргументът разширение дава - дълбаем коментари е произволно; тук нв се използва като съкращение за "без коментар".
cloc отстранени над 31 000 линии от файл:

 промпт> WC-л sqlite3.c sqlite3.c.nc
      82895 sqlite3.c
      50901 sqlite3.c.nc
     133796 общо
 промпт> ехо "82895-50901" | ж.к.
 31994

Сега можем да се сравни orignial файл, sqlite3.c и на един лишен от коментари, sqlite3.c.nc с инструменти като разл или vimdiff и да видим какво точно cloc счита коментари и празни редове. Строга доказателство, че жилки-надолу файл съдържа същата C код, както оригиналът е да се съберат тези файлове и сравни контролни суми на получените обектни файлове.
На първо място, на оригиналния файл източник:

 промпт> GCC-с sqlite3.c
промпт> md5sum sqlite3.o
cce5f1a2ea27c7e44b2e1047e2588b49 sqlite3.o

Next, версията без забележки:

 подкани> MV sqlite3.c.nc sqlite3.c
промпт> GCC-с sqlite3.c
промпт> md5sum sqlite3.o   
cce5f1a2ea27c7e44b2e1047e2588b49 sqlite3.o

cloc отстранени над 31 000 линии на коментари и празни, но не променят изходния код по някакъв значителен начин, тъй като в резултат на обект файл съвпада с оригинала.

Работа с компресирани архиви http://cloc.sourceforge.net/up.gif

Версиите на cloc преди v1.07 изискваше --extract-with= <cmd> опция да кажа cloc как да разширите архивен файл. Започвайки с v1.07 това е екстракцията се опита автоматично. В момента методът за автоматично извличане работи сравнително добре на Unix-тип ОС за следните типове файлове: tar.gz, tar.bz2, TGZ, ZIP, ушите...... Някои от тези разширения работят на Windows, ако е WinZip инсталиран в местоположението по подразбиране (C: \ Program Files \ WinZip \ WinZip32.exe). Освен това, с по-нови версии на WinZip, на командния ред добавка е необходима за правилното функциониране; в този случай би се позове cloc с нещо като 

--extract-with="\"c:\Program Files\WinZip\wzunzip\" -e -o >FILE< ." (реф. форум пост ).

В ситуации, в които автоматично извличане не успее, една може да опитате --extract-with= <cmd> вариант да брои реда код в катран файлове, ZIP файлове или други компресирани архиви, за които има един инструмент за извличане. cloc под командването добив от потребителя условие и разширява архива във временна директория (създаден с File :: Temp), брои реда код в временната директория, след това премахва тази директория. Макар и не особено полезно, когато се занимават с един компресиран архив (в края на краищата, ако ти започваш да напишете командата екстракция или иначе защо просто не ръчно разширите архива?) Тази опция е удобна за работа с няколко архиви наведнъж.

Например, да кажем, че имате следните източници Tarballs на Unix машина 

perl-5.8.5.tar.gz 
Python-2.4.2.tar.gz 

и искате да преброите всички код в тях. Командата ще бъде

cloc --extract-with='gzip -dc >FILE< | tar xf -' perl-5.8.5.tar.gz Python-2.4.2.tar.gz

Ако това Unix машина има GNU катран (което може да декомпресирате и извличане в един етап) командата може да бъде съкратен, за да

cloc - екстракт-с = 'катран zxf> FILE  <"Perl-5.8.5.tar.gz Python-2.4.2.tar.gz 

На компютър с Windows с WinZip инсталирана в c:\Program Files\WinZip командата ще изглежда така

cloc.exe - екстракт-с = "\" C:  ".> FILE <\ Program Files \ WinZip \ WinZip32.exe \-е-о"  Perl-5.8.5.tar.gz Python-2.4.2.tar.gz 

Java .ear файлове са архивирани файлове, които съдържат допълнителни Zip файлове. cloc могат да се справят вложени компресирани архиви без затруднения - условие, че всички тези файлове са компресирани и архивирани по същия начин. Примери за преброяване на Java .ear файл в Unix и Windows:

Unix> cloc - ".  Разархивирайте-г> FILE <" извлечение-с = Project.ear
DOS> cloc.exe - екстракт-с =  "\" C: \ Program Files \ WinZip \ WinZip32.exe \ "-д-о> FILE  <."  Project.ear

Разлики http://cloc.sourceforge.net/up.gif

The - ключа разл позволява да се измери относителната промяна в изходния код и коментари между две версии на даден файл, директория или архив. Различията разкриват много повече от абсолютния брой на кодовите две версии на файла. Например, да кажем файл източник разполага с 100 линии и разработчика му доставя по-нова версия с 102 линии. Каза добавите коментар две линии, или изтриете седемнадесет източник линии и добавете четиринадесет източници линии и пет коментар линии, или е направил пълно пренаписване, като се отстраняват всички 100 оригинални линии и добавяне на 102 линии на всички нов източник? Опцията разл казва колко линии на източник бяха добавени, премахнати, видоизменени или останал същият, и колко линии на коментари бяха добавени, премахнати, видоизменени или останал същият.
В допълнение към файлови двойки, може да се даде cloc двойки на директории, или двойки на файлови архиви, или архивен файл и директория. cloc ще се опита да приведе файлови двойки в рамките на директории или архивите и сравни Diffs за всяка двойка. Например, за да видим какво се е променило между GCC 4.4.0 и 4.5.0 един може да направи

  cloc - разл GCC-4.4.0.tar.bz2  GCC-4.5.0.tar.bz2 

Бъдете готови да се изчака известно време, докато резултатите все пак; опция - разл работи много по-бавно, отколкото абсолютна код брой.
За да видите как cloc Подравнява файлове между два архива, използвайте опцията - разл-подравняване

  cloc - разл-aligment = align.txt  GCC-4.4.0.tar.bz2 GCC-4.5.0.tar.bz2 

да произвежда файл align.txt на който показва файлови двойки, както и файловете се добавят и изтриват. Символите == и! = Преди всеки файл чифт посочи дали файловете са еднакви (==), или ако те имат различно съдържание (! =).
Ето примерен резултат показва разликата между Python 2.6.6 и 2.7 пресата:

промпт> cloc - разл Python-2.6.6.tar.bz2 Python-2.7.tar.bz2
         3870 текстови файлове.
         4130 текстови files.s
         2177 файл игнорирани.
                                                  
     2 грешки:
     Diff грешка (цитиран коментари?): / Tmp/4QAqkrHN7Z/Python-2.6.6/Mac/Modules/qd/qdsupport.py
     Diff грешка (цитиран коментари?): / Tmp/LvStB1lQxd/Python-2.7/Mac/Modules/qd/qdsupport.py
         
     http://cloc.sourceforge.net V 1.52 T = 422.0 сек (0.0 файлове / сек, 0,0 реда / сек)
     -------------------------------------------------- -----------------------------
     Езикови                      файлове          празен        коментар         код
     -------------------------------------------------- -----------------------------
     Vim скрипт
      същата                            0               0              7           85
      модифициран                       1               0              0           20
      добавя                            0               0              0            1
      отстранява                        0               0              0            0
     Очаквам
      същото                            1               0              0           60
      модифициран                       0               0              0            0
      Добавят се                        6               0              0            0
      отстранява                        0               0              0            0
     CSS
      същото                            1               0             19          318
      модифициран                       0               0              0            0
      добавя                            0               0              0            0
      отстранява                        0               0              0            0
     XML
      същото                            1               0              0            4
      модифициран                       0               0              0            0
      прибавя                           3               0              0            0
      отстранен                         1               0              0            0
     m4
      същото                            1               0             19         1089
      модифициран                       2               0              0          130
      прибавя                           5               6              5          150
      отстранен                         0             660             15         5905
     Visual Basic
      същото                            2               0              1           12
      модифициран                       0               0              0            0
      добавя                            0               0              0            0
      отстранява                        0               0              0            0
     Фъфлене
      същото                            1               0            503         2933
      модифициран                       0               0              0            0
      добавя                            0               0              0            0
      отстранява                        0               0              0            0
     Нант скриптове
      същото                            2               0              0           30
      модифициран                       0               0              0            0
      добавя                            0               0              0            0
      отстранява                        0               0              0            0
     HTML
      същия                            12               0             11         2329
      модифициран                       2               0              0            2
      добавя                            0               0              0            0
      отстранен                         9               0              0            0
     правя
      същото                            3               0            353         2888
      модифициран                       7               0              3           11
      прибавя                           2               1              0           14
      отстранен                         0               2              0            8
     Objective C
      съща                              6               0             70          633
      модифициран                       1               0              0            2
      добавя                            0               0              0            0
      отстранява                        0               0              0            0
     Монтаж
      същия                            22               0           1575         9156
      модифициран                      14               0             78          174
      прибавя                           3             171            111          998
      отстранен                         2               1              0          189
     Bourne Shell
      същия                            26               0           2828        20114
      модифициран                       7               0            255         2179
      добавя                            5             163           1103         4770
      отстранен                         0             550           2444        11660
     (Неизвестен)
      същата                            0               0              0            0
      модифициран                       0               0              0            0
      добавя                           32               0              0            0
      отстранен                        26               0              0            0
     C + +
      същата                            0               0              0            0
      модифициран                       0               0              0            0
      прибавя                           2               0              0            0
      отстранява                        0               0              0            0
     Teamcenter Def
      съща                              6               0            158          885
      модифициран                       2               0              0            0
      прибавя                           1               2              4           17
      отстранен                         1               0              4            2
     DOS Batch
      същия                            26               0            101          416
      модифицирана                      5               0              1            8
      прибавя                           1               0              0            0
      отстранява                        0               0              0            0
     C / C + + Header
      една и съща                     143               0           9016        37452
      модифициран                      90               0            157        15564
      добавя                           12             181            341        10247
      отстранява                        1             101            129         5219
     C
      една и съща                     222               0          28753       322642
      модифициран                     157               0            542         5023
      добавя                          141            1485           1730        12440
      отстранен                         4             223            619         4519
     Питон
      същата                         1211               0          92289       348923
      модифициран                     740               0           1238        11589
      добавя                          114            2845           4645        17251
      отстранен                        23            1409           2617         6385
     -------------------------------------------------- -----------------------------
     SUM:
      същата                         1686               0         135703       749969
      модифициран                    1028               0           2274        34702
      добавя                          327            4854           7939        45888
      отстранен                        67            2946           5828        33887
     -------------------------------------------------- -----------------------------

Note the two errors for the file Python- X /Mac/Modules/qd/qdsupport.py . This file has Python docstrings (text between pairs of triple quotes) that contain C comments. cloc treats docstrings as comments and handles them by first converting them to C comments, then using the C comment removing regular expression. Nested C comments yield erroneous results however.
There's also output for the language "(unknown)". Files in this category are non-source files and therefore not counted; their presence is merely noted as having been removed, added, or modified.

Създаване на персонализиран Езикови Определения http://cloc.sourceforge.net/up.gif

cloc can write its language comment definitions to a file or can read comment definitions from a file, overriding the built-in definitions. This can be useful when you want to use cloc to count lines of a language not yet included, to change association of file extensions to languages, or to modify the way existing languages are counted.

The easiest way to create a custom language definition file is to make cloc write its definitions to a file, then modify that file:

  Unix> cloc  --write-lang-def=my_definitions.txt 

creates the file my_definitions.txt which can be modified then read back in with either the --read-lang-def or --force-lang-def option. The difference between the options is former merges language definitions from the given file in with cloc's internal definitions with cloc'taking precedence if there are overlaps. The --force-lang-def option, on the other hand, replaces cloc's definitions completely. This option has a disadvantage in preventing cloc from counting languages whose extensions map to multiple languages as these languages require additional logic that is not easily expressed in a definitions file.

  Unix> cloc  --read-lang-def=my_definitions.txt file1 file2 dir1 ...

Each language entry has four parts:

  1. The language name starting in column 1.
  2. One or more comment filters starting in column 5.
  3. One or more filename extensions starting in column 5.
  4. A 3rd generation scale factor starting in column 5. This entry must be provided but its value is not important unless you want to compare your language to a hypothetical third generation programming language.

A filter defines a method to remove comment text from the source file. For example the entry for C++ looks like this

  C++
  filter remove_matches ^\s*//
  filter call_regexp_common C
  extension C
  extension cc
  extension cpp
  extension cxx
  extension pcc
  3rd_gen_scale 1.51 

C++ has two filters: first, remove lines that start with optional whitespace and are followed by // . Next, remove all C comments. C comments are difficult to express as regular expressions so a call is made to Regexp::Common to get the appropriate regular expression to match C comments which are then removed.
A more complete discussion of the different filter options may appear here in the future. The output of cloc's --write-lang-def option should provide enough examples for motivated individuals to modify or extend cloc's language definitions.
Комбинирайте Reports http://cloc.sourceforge.net/up.gif

If you manage multiple software projects you might be interested in seeing line counts by project, not just by language. Say you manage three software projects called MySQL, PostgreSQL, and SQLite. The teams responsible for each of these projects run cloc on their source code and provide you with the output. For example MySQL team does

  cloc --report-file=mysql-5.1.42.txt  mysql-5.1.42.tar.gz 

and provides you with the file mysql-5.1.42.txt . The contents of the three files you get are

 Unix> cat mysql-5.1.42.txt
http://cloc.sourceforge.net v 1.50 T=26.0 s (108.1 files/s, 65774.5 lines/s)
--------------------------------------------------------------------------------
Language                     files           blank          comment         code  
--------------------------------------------------------------------------------  
C++                            615           93609           110909       521041  
C                              642           83179            82424       393602  
C/C++ Header                  1065           33980            77633       142779  
Bourne Shell                   178           14892            11437        74525  
Perl                            60            7634             4667        22703
m4                              13            1220              394        10497  
make                           119             914             1855         4447  
XML                             27             564               23         4107  

SQL                             18             517              209         3433  
Assembly                        12             161                0         1304  
yacc                             2             167               40         1048  
lex                              2             332              113          879  
Teamcenter def                  43              85              219          701  
Javascript                       3              70              140          427  
Pascal                           2               0              436          377  
HTML                             1               7                0          250  
Bourne Again Shell               1               6                1           48  
DOS Batch                        8              23               73           36  
--------------------------------------------------------------------------------  
SUM:                          2811          237360           290573      1182204  
--------------------------------------------------------------------------------  
Unix> cat sqlite-3.6.22.txt  http://cloc.sourceforge.net v 1.50 T=3.0 s (4.7 files/s, 53833.7 lines/s)  
-------------------------------------------------------------------------------  
Language                     files           blank          comment         code  
-------------------------------------------------------------------------------  
C                                2            7459            37993        68944  
Bourne Shell                     7            3344             4522        25849  
m4                               2             754               20         6557  
C/C++ Header                     2             155             4808         1077  
make                             1               6                0           13  
-------------------------------------------------------------------------------  
SUM:                            14           11718            47343       102440  
-------------------------------------------------------------------------------    
Unix> cat postgresql-8.4.2.txt  http://cloc.sourceforge.net v 1.50 T=16.0 s (129.1 files/s, 64474.9 lines/s)  
-------------------------------------------------------------------------------  
Language                     files           blank          comment         code  
-------------------------------------------------------------------------------  
C                              923          102324           167390       563865  
C/C++ Header                   556            9180            22723        40990  
Bourne Shell                    51            3692             3245        28486  
SQL                            260            8246             5645        25862  
yacc                             6            2667             2126        22825  
Perl                            36             782              696         4894  
lex                              8             708             1525         3638  
make                           180            1215             1385         3453  
m4                              12             199               25         1431  
Teamcenter def                  13               4                0         1104  
HTML                             2              94                1          410  
DOS Batch                        7              53               22          188  
XSLT                             5              41               30          111  
Assembly                         3              17                0          105  
D                                1              14               14           65  
CSS                              1              16                7           44  
sed                              1               1                7           15  
Python                           1               5                1           12  
-------------------------------------------------------------------------------  
SUM:                          2066          129258           204842       697498  
-------------------------------------------------------------------------------

While these three files are interesting, you also want to see the combined counts from all projects. That can be done with cloc's --sum_reports option:

  Unix> cloc --sum-reports  --report_file=databases mysql-5.1.42.txt postgresql-8.4.2.txt sqlite-3.6.22.txt
  Wrote  databases.lang
  Wrote  databases.file 

The report combination produces two output files, one for sums by programming language ( databases.lang ) and one by project ( databases.file ). Their contents are

 Unix> cat databases.lang  
http://cloc.sourceforge.net v 1.50  
--------------------------------------------------------------------------------  
Language                files           blank            comment            code  
--------------------------------------------------------------------------------  
C                        1567          192962             287807         1026411  
C++                       615           93609             110909          521041  
C/C++ Header             1623           43315             105164          184846  
Bourne Shell              236           21928              19204          128860  
SQL                       278            8763               5854           29295  
Perl                       96            8416               5363           27597  
yacc                        8            2834               2166           23873  
m4                         27            2173                439           18485  
make                      300            2135               3240            7913  
lex                        10            1040               1638            4517  
XML                        27             564                 23            4107  
Teamcenter def             56              89                219            1805  
Assembly                   15             178                  0            1409  
HTML                        3             101                  1             660  
Javascript                  3              70                140             427  
Pascal                      2               0                436             377  
DOS Batch                  15              76                 95             224  
XSLT                        5              41                 30             111  
D                           1              14                 14              65  
Bourne Again Shell          1               6                  1              48  
CSS                         1              16                  7              44  
sed                         1               1                  7              15  
Python                      1               5                  1              12  
--------------------------------------------------------------------------------  
SUM:                     4891          378336             542758         1982142  
--------------------------------------------------------------------------------    
Unix> cat databases.file  
----------------------------------------------------------------------------------  
Report File             files           blank            comment            code  
----------------------------------------------------------------------------------  
mysql-5.1.42.txt         2811          237360             290573         1182204  
postgresql-8.4.2.txt     2066          129258             204842          697498  
sqlite-3.6.22.txt          14           11718              47343          102440  
----------------------------------------------------------------------------------  
SUM:                     4891          378336             542758         1982142  
----------------------------------------------------------------------------------  

Report files themselves can be summed together. Say you also manage development of Perl and Python and you want to keep track of those line counts separately from your database projects. First create reports for Perl and Python separately:

 cloc --report-file=perl-5.10.0.txt  perl-5.10.0.tar.gz
 cloc  --report-file=python-2.6.4.txt Python-2.6.4.tar.bz2

then sum these together with

Unix> cloc --sum-reports --report_file=script_lang perl-5.10.0.txt python-2.6.4.txt  
Wrote script_lang.lang  
Wrote script_lang.file
    
Unix> cat script_lang.lang  
http://cloc.sourceforge.net v 1.50  
-------------------------------------------------------------------------------  
Language                   files          blank           comment          code  
-------------------------------------------------------------------------------  
C                            518          61871             52705        473034  
Python                      1965          76022             95289        365716  
Perl                        2052         110356            130018        292281  
C/C++ Header                 381          13762             21402        102276  
Bourne Shell                 149           9376             11665         81508  
Lisp                           2           1154              2745         10448  
Assembly                      38           1616              1712          9755  
m4                             3            825                34          7124  
make                          16            954               804          4829 
HTML                          25            516                13          3010  
Teamcenter def                 9            170               162          2075  
XML                           28            288                 0          2034  
C++                           10            312               277          2000  
yacc                           2            128                97          1549  
DOS Batch                     42            175               152           746  
Objective C                    7            102                70           635  
YAML                           2              2                 0           489  
CSS                            1             94                19           308  
vim script                     1             36                 7           105  
Expect                         1              0                 0            60  
NAnt scripts                   2              1                 0            30  
Visual Basic                   2              1                 1            12  
-------------------------------------------------------------------------------  
SUM:                        5256         277761            317172       1360024  
-------------------------------------------------------------------------------    
Unix> cat script_lang.file  
-------------------------------------------------------------------------------  
Report File                files          blank           comment          code  
-------------------------------------------------------------------------------  
python-2.6.4.txt            2746         135676            143269        830347  
perl-5.10.0.txt             2510         142085            173903        529677  
-------------------------------------------------------------------------------  
SUM:                        5256         277761            317172       1360024  
-------------------------------------------------------------------------------

Finally, combine the combination files:

Unix> cloc --sum-reports --report_file=everything databases.lang script_lang.lang  
Wrote everything.lang  
Wrote everything.file
    
Unix> cat everything.lang
http://cloc.sourceforge.net v 1.50  
--------------------------------------------------------------------------------  
Language                       files          blank          comment        code  
--------------------------------------------------------------------------------  
C                               2085         254833           340512     1499445  
C++                              625          93921           111186      523041  
Python                          1966          76027            95290      365728  
Perl                            2148         118772           135381      319878  
C/C++ Header                    2004          57077           126566      287122  
Bourne Shell                     385          31304            30869      210368  
SQL                              278           8763             5854       29295  
m4                                30           2998              473       25609  
yacc                              10           2962             2263       25422  
make                             316           3089             4044       12742  
Assembly                          53           1794             1712       11164  
Lisp                               2           1154             2745       10448  
XML                               55            852               23        6141  
lex                               10           1040             1638        4517  
Teamcenter def                    65            259              381        3880  
HTML                              28            617               14        3670  
DOS Batch                         57            251              247         970  
Objective C                        7            102               70         635  
YAML                               2              2                0         489  
Javascript                         3             70              140         427  
Pascal                             2              0              436         377  
CSS                                2            110               26         352  
XSLT                               5             41               30         111  
vim script                         1             36                7         105  
D                                  1             14               14          65  
Expect                             1              0                0          60  
Bourne Again Shell                 1              6                1          48  
NAnt scripts                       2              1                0          30  
sed                                1              1                7          15  
Visual Basic                       2              1                1          12  
--------------------------------------------------------------------------------  
SUM:                           10147         656097           859930     3342166  
--------------------------------------------------------------------------------    
Unix> cat everything.file  
-------------------------------------------------------------------------------  
Report File                    files          blank          comment        code  
-------------------------------------------------------------------------------  
databases.lang                  4891         378336           542758     1982142  
script_lang.lang                5256         277761           317172     1360024  
-------------------------------------------------------------------------------  
SUM:                           10147         656097           859930     3342166  -------------------------------------------------------------------------------

SQL http://cloc.sourceforge.net/up.gif

Cloc can write results in the form of SQL table create and insert statements for use with relational database programs such as SQLite, MySQL, PostgreSQL, Oracle, or Microsoft SQL. Once the code count information is in a database, the information can be interrogated and displayed in interesting ways.
A database created from cloc SQL output has two tables, metadata and t :


metadata

Field

Тип

timestamp

text

project

text

elapsed_s

реален

t


Field

Тип

project

text

език

text

file

text

nBlank

integer

nComment

integer

nCode

integer

nScaled

реален

The metadata table contains information about when the cloc run was made. The --sql-append switch allows one to combine many runs in a single database; each run adds a row to the metadata table. The code count information resides in table t .
Let's repeat the code count examples of Perl, Python, SQLite, MySQL and PostgreSQL tarballs shown in the combine reports example above, this time using the SQL output options and the SQLite database engine.
The --sql switch tells cloc to generate output in the form of SQL table create and insert commands. The switch takes an argument of a file name to write these SQL statements into, or, if the argument is 1 (numeric one), streams output to STDOUT. Since the SQLite command line program, sqlite3 , can read commands from STDIN, we can dispense with storing SQL statements to a file and use --sql 1 to pipe data directly into the SQLite executable:

  cloc --sql 1 --sql-project mysql  mysql-5.1.42.tar.gz | sqlite3 code.db 

The --sql-project mysql part is optional; there's no need to specify a project name when working with just one code base. However, since we'll be adding code counts from four other tarballs, we'll only be able to identify data by input source if we supply a project name for each run.
Now that we have a database we will need to pass in the --sql-append switch to tell cloc not to wipe out this database but instead add more data:

  cloc --sql 1 --sql-project postgresql  --sql-append postgresql-8.4.2.tar.bz2 | sqlite3 code.db
  cloc  --sql 1 --sql-project sqlite --sql-append sqlite-amalgamation-3.6.22.tar.gz |  sqlite3 code.db
  cloc  --sql 1 --sql-project python --sql-append Python-2.6.4.tar.bz2 | sqlite3  code.db
  cloc  --sql 1 --sql-project perl --sql-append perl-5.10.0.tar.gz | sqlite3 code.db

Now the fun begins--we have a database, code.db , with lots of information about the five projects and can begin querying it for all manner of interesting facts.

Which is the longest file over all projects?

  > sqlite3 code.db 'select project,file,nBlank+nComment+nCode  as nL from t where nL = (select max(nBlank+nComment+nCode) from t)'
 sqlite|sqlite-3.6.22/sqlite3.c|110860

sqlite3 's default output format leaves a bit to be desired. We can add an option to the program's rc file, ~/.sqliterc , to show column headers: 
.header on 
One might be tempted to also include 
.mode column 
in ~/.sqliterc but this causes problems when the output has more than one row since the widths of entries in the first row govern the maximum width for all subsequent rows. Often this leads to truncated output--not at all desireable. One option is to write a custom SQLite output formatter such as sqlite_formatter . It is used like so:

> sqlite3 code.db 'select project,file,nBlank+nComment+nCode as nL from t where nL = (select max(nBlank+nComment+nCode) from t)' | sqlite_formatter
    
Project File                    nL       
_______ _______________________ ______   
sqlite  sqlite-3.6.22/sqlite3.c 110860

Note also that sqlite3 has an HTML output option, --html , that might also prove useful.

Which is the longest file in each project?

> sqlite3 code.db 'select project,file,max(nBlank+nComment+nCode) as nL from t group by project order by nL;' | sqlite_formatter    

Project    File                                          nL       
__________ _____________________________________________ ______   
perl       perl-5.10.0/t/op/mkdir.t                      22658   
python     Python-2.6.4/Lib/email/quoprimime.py          28091   
postgresql postgresql-8.4.2/contrib/pgcrypto/pgp-pgsql.c 40041   
mysql      mysql-5.1.42/netware/mysqldump.def            51841   
sqlite     sqlite-3.6.22/config.sub                     110860 

Which files in each project have the most code lines?

  > sqlite3 code.db 'select  project,file,max(nCode) as nL from t group by project order by nL desc;' |  sqlite_formatter
  
    Project     File                                          nL    
    __________  _____________________________________________ _____ 
    sqlite      sqlite-3.6.22/config.sub                      66142 
    mysql       mysql-5.1.42/netware/mysqldump.def            38555 
    postgresql  postgresql-8.4.2/contrib/pgcrypto/pgp-pgsql.c 36905 
    python      Python-2.6.4/Lib/email/quoprimime.py          26705 
    perl        perl-5.10.0/t/op/mkdir.t                      20079 

Which C source files with more than 300 lines have a comment ratio below 1%?

  > sqlite3 code.db 'select project,  language, file, nCode, nComment, (100.0*nComment)/(nComment+nCode) as  comment_ratio from t 
  where language="C" and nCode >  300 and comment_ratio < 1 order by comment_ratio;' | sqlite_formatter
  
    Project     Language  File                                                                           nCode nComment comment_ratio      
__________ ________ _____________________________________________________________________________ _____ ________ __________________ mysql C mysql-5.1.42/scripts/mysql_fix_privilege_tables_sql.c 658 0 0.0                 python C Python-2.6.4/Python/graminit.c 2143 1 0.0466417910447761 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c 2095 1 0.0477099236641221 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_french.c 1211 1 0.0825082508250825 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_french.c 1201 1 0.0831946755407654 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_hungarian.c 1182 1 0.084530853761623  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_hungarian.c 1178 1 0.0848176420695505 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_english.c 1072 1 0.0931966449207828 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_english.c 1064 1 0.0938967136150235 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_spanish.c 1053 1 0.094876660341556  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_spanish.c 1049 1 0.0952380952380952 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_italian.c 1031 1 0.0968992248062016 postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_italian.c 1023 1 0.09765625         postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_portuguese.c 981 1 0.10183299389002   postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_portuguese.c 975 1 0.102459016393443  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_romanian.c 967 1 0.103305785123967  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_2_romanian.c 961 1 0.103950103950104  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_finnish.c 720 1 0.13869625520111   postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_porter.c 717 1 0.139275766016713  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_finnish.c 714 1 0.13986013986014   postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_porter.c 711 1 0.140449438202247  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_KOI8_R_russian.c 660 1 0.151285930408472  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_russian.c 654 1 0.152671755725191  python C Python-2.6.4/Mac/Modules/qt/_Qtmodule.c 26705 42 0.157026956294164  python C Python-2.6.4/Mac/Modules/icn/_Icnmodule.c 1521 3 0.196850393700787  mysql C mysql-5.1.42/strings/ctype-extra.c 8348 17 0.203227734608488  python C Python-2.6.4/Python/Python-ast.c 5910 17 0.286823013328834  python C Python-2.6.4/Mac/Modules/menu/_Menumodule.c 3263 10 0.305530094714329  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_dutch.c 596 2 0.334448160535117  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_dutch.c 586 2 0.340136054421769  perl C perl-5.10.0/x2p/a2p.c 2916 10 0.341763499658236  python C Python-2.6.4/Mac/Modules/qd/_Qdmodule.c 6694 24 0.357249181303959  python C Python-2.6.4/Mac/Modules/win/_Winmodule.c 3056 11 0.358656667753505  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_german.c 476 2 0.418410041841004  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_german.c 470 2 0.423728813559322  perl C perl-5.10.0/x2p/walk.c 2024 10 0.491642084562439  python C Python-2.6.4/Mac/Modules/ctl/_Ctlmodule.c 5442 28 0.511882998171846  python C Python-2.6.4/Mac/Modules/ae/_AEmodule.c 1347 7 0.51698670605613   python C Python-2.6.4/Mac/Modules/app/_Appmodule.c 1712 9 0.52295177222545  mysql C mysql-5.1.42/strings/ctype-euc_kr.c 8691 49 0.560640732265446  mysql C mysql-5.1.42/storage/archive/archive_reader.c 348 2 0.571428571428571  python C Python-2.6.4/Mac/Modules/evt/_Evtmodule.c 504 3 0.591715976331361  python C Python-2.6.4/Modules/expat/xmlrole.c 1250 8 0.635930047694754  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_UTF_8_danish.c 312 2 0.636942675159236  mysql C mysql-5.1.42/strings/ctype-gbk.c 9946 64 0.639360639360639  postgresql C postgresql-8.4.2/src/backend/snowball/libstemmer/stem_ISO_8859_1_danish.c 310 2 0.641025641025641  mysql C mysql-5.1.42/strings/ctype-gb2312.c 5735 40 0.692640692640693  python C Python-2.6.4/Mac/Modules/res/_Resmodule.c 1621 12 0.734843845682792   python C Python-2.6.4/Mac/Modules/drag/_Dragmodule.c 1046 8 0.759013282732448  postgresql C postgresql-8.4.2/contrib/hstore/hstore_op.c 522 4 0.760456273764259  python C Python-2.6.4/Mac/Modules/list/_Listmodule.c 1022 8 0.776699029126214  python C Python-2.6.4/Mac/Modules/te/_TEmodule.c 1198 10 0.827814569536424  python C Python-2.6.4/Mac/Modules/cg/_CGmodule.c 1190 10 0.833333333333333  postgresql C postgre sql-8.4.2/contrib/hstore/hstore_io.c 451 4 0.879120879120879  postgresql C postgresql-8.4.2/src/interfaces/ecpg/preproc/preproc.c 36905 330 0.886262924667651  python C Python-2.6.4/Modules/clmodule.c 2379 23 0.957535387177352  python C Python-2.6.4/Mac/Modules/folder/_Foldermodule.c 306 3 0.970873786407767 

What are the ten longest files (based on code lines) that have no comments at all? Exclude header and YAML files.

  > sqlite3 code.db 'select project, file,  nCode from t where nComment = 0 and language not in ("C/C++ Header",  "YAML") order by nCode desc limit 10;' | sqlite_formatter
    
    Project File                                                   nCode 
    _______  _____________________________________________________ _____ 
    python   Python-2.6.4/PC/os2emx/python26.def                    1188 
    python   Python-2.6.4/Lib/test/cjkencodings_test.py             1019
    python   Python-2.6.4/Tools/msi/schema.py                        920 
    python   Python-2.6.4/Lib/msilib/schema.py                       920 
    perl     perl-5.10.0/symbian/config.sh                           810 
    perl     perl-5.10.0/uconfig.sh                                  771 
    python   Python-2.6.4/Tools/pybench/Lookups.py                   700 
    mysql    mysql-5.1.42/scripts/mysql_fix_privilege_tables_sql.c   658 
    python   Python-2.6.4/Tools/pybench/Numbers.py                   637 
    python   Python-2.6.4/Tools/pybench/Arithmetic.py                596

What are the most popular languages (in terms of lines of code) in each project?

  > sqlite3 code.db 'select project,  language, sum(nCode) as SumCode from t group by project,language order by project,SumCode  desc;' | sqlite_formatter
    Project     Language           SumCode 
    __________  __________________ _______ 
    mysql       C++                 521041 
    mysql       C                   393602 
    mysql       C/C++ Header        142779 
    mysql       Bourne Shell         74525 
    mysql       Perl                 22703
    mysql       m4                   10497 
    mysql       make                  4447 
    mysql       XML                   4107 
    mysql       SQL                   3433 
    mysql       Assembly              1304 
    mysql       yacc                  1048 
    mysql       lex                    879 
    mysql       Teamcenter def         701 
    mysql       Javascript             427 
    mysql       Pascal                 377 
    mysql       HTML                   250
    mysql       Bourne Again Shell      48 
    mysql       DOS Batch               36  
    perl        Perl                292281 
    perl        C                   140483 
    perl        C/C++ Header         44042 
    perl        Bourne Shell         36882 
    perl        Lisp                  7515 
    perl        make                  2044 
    perl        C++                   2000 
    perl        XML                   1972 
    perl        yacc                  1549 
    perl        YAML                   489 
    perl        DOS Batch              322 
    perl        HTML                    98 
    postgresql  C                   563865 
    postgresql  C/C++ Header         40990 
    postgresql  Bourne Shell         28486 
    postgresql  SQL                  25862 
    postgresql  yacc                 22825 
    postgresql  Perl                  4894 
    postgresql  lex                   3638 
    postgresql  make                  3453 
    postgresql  m4                    1431 
    postgresql  Teamcenter def        1104 
    postgresql  HTML                   410 
    postgresql  DOS Batch              188 
    postgresql  XSLT                   111 
    postgresql  Assembly               105 
    postgresql  D                       65 
    postgresql  CSS                     44 
    postgresql  sed                     15 
    postgresql  Python                  12 
    python  Python                  365716 
    python  C                       332551 
    python  C/C++ Header             58234 
    python  Bourne Shell             44626 
    python  Assembly                  9755 
    python  m4                        7124 
    python  Lisp                      2933 
    python  HTML                      2912 
    python  make                      2785 
    python  Teamcenter def            2075 
    python  Objective C                635 
    python  DOS Batch                  424 
    python  CSS                        308 
    python  vim script                 105 
    python  XML                         62 
    python  Expect                      60 
    python  NAnt scripts                30 
    python  Visual Basic                12 
    sqlite  C                        68944 
    sqlite  Bourne Shell             25849 
    sqlite  m4                        6557 
    sqlite  C/C++ Header              1077 
    sqlite  make 13 

Трето поколение Language Scale Фактори http://cloc.sourceforge.net/up.gif

cloc versions before 1.50 by default computed, for the provided inputs, a rough estimate of how many lines of code would be needed to write the same code in a hypothetical third-generation computer language. To produce this output one must now use the --3 switch.
Scale factors were derived from the 2006 version of language gearing ratios listed at Mayes Consulting web site, http://softwareestimator.com/IndustryData2.htm , using this equation:
cloc scale factor for language X = 3rd generation default gearing ratio / language X gearing ratio
for example,
cloc 3rd generation scale factor for DOS Batch = 80 / 128 = 0.625
The biggest flaw with this approach is that gearing ratios are defined for logical lines of source code not physical lines (which cloc counts). The values in cloc's 'scale' and '3rd gen. equiv.' columns should be taken with a large grain of salt.
Ограничения http://cloc.sourceforge.net/up.gif

Identifying comments within source code is trickier than one might expect. Many languages would need a complete parser to be counted correctly. cloc does not attempt to parse any of the languages it aims to count and therefore is an imperfect tool. The following are known problems:

  1. Lines containing both source code and comments are counted as lines of code.
  2. Comment markers within strings or here-documents are treated as actual comment markers and not string literals. For example the following lines of C code
  1.  printf(" /* ");
  2. for (i = 0; i < 100; i++) {
  3.     a += i;
  4. }
  5. printf(" */ ");

appear to cloc as two lines of C code (the lines with black text) and three lines of comments (the lines which have only red text--lines with both black and red text are treated as code).

  1. Lua long comments are not recognized.

Как да поиска помощ за Допълнителен език http://cloc.sourceforge.net/up.gif

If cloc does not recognize a language you are interested in counting, post the following information to a Feature Request at cloc's SourceForge page:

  1. File extensions associated with the language. If the language does not rely on file extensions and instead works with fixed file names or with #! style program invocations, explain what those are.
  2. A description of how comments are defined.
  3. Links to sample code.

Автор http://cloc.sourceforge.net/up.gif

Al Danial http://cloc.sourceforge.net/address.png

Благодарности http://cloc.sourceforge.net/up.gif

Wolfram Rösler provided most of the code examples in the test suite. These examples come from his Hello World Collection .

Ismet Kursunoglu found errors with the MUMPS counter and provided access to a computer with a large body of MUMPS code to test cloc.
Tod Huggins gave helpful suggestions for the Visual Basic filters.
Anton Demichev found a flaw with the JSP counter in cloc v0.76 and wrote the XML ouput generator for the --xml option.
Reuben Thomas pointed out that ISO C99 allows // as a comment marker, provided code for the --no3 and --stdin-name options, counting the m4 language, and suggested several user-interface enhancements.

Michael Bello provided code for the --opt-match-f , --opt-not-match-f , --opt-match-d , and --opt-not-match-d options.
Mahboob Hussain inspired the --original-dir and --skip-uniqueness options, found a bug in the duplicate file detection logic and improved the JSP filter.
Randy Sharo found and fixed an uninitialized variable bug for shell scripts having only one line.
Steven Baker found and fixed a problem with the YAML output generator.
Greg Toth provided code to improve blank line detection in COBOL.
Joel Oliveira provided code to let --exclude-list-file handle directory name exclusion.
Blazej Kroll provided code to produce an XSLT file, cloc-diff.xsl , when producing XML output for the --diff option.
Denis Silakov enhanced the code which generates cloc.xsl when using --by-file and --by-file-by-lang options, and provided an XSL file that works with --diff output.
Andy (awalshe@sf.net) provided code to fix several bugs: correct output of --counted so that only files that are used in the code count appear and that results are shown by language rather than file name; allow --diff output from multiple runs to be summed together with --sum-reports .
Jari Aalto created the initial version of cloc.1.pod and maintains the Debian package for cloc.
Mikkel Christiansen (mikkels@gmail.com) provided counter definitions for Clojure and ClojureScript.
Vera Djuraskovic from Webhostinggeeks.com provided the Serbo-Croatian translation.
Erik Gooven Arellano Casillas provided an update to the MXML counter to recognize Actionscript comments.
The development of cloc was partially funded by the Northrop Grumman Corporation.

Авторско право http://cloc.sourceforge.net/up.gif

Copyright (c) 2006-2013, Northrop Grumman Corporation. 

Разрешително http://cloc.sourceforge.net/up.gif

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Like Us On FB

Ajoft Technologies

We are enterprise level product and applications development company specializing in developing high end scalable software and smart phone products and advanced applications.
Live Help