代码统计工具V1.0.0(支持各种文件类型)

点击下载《代码统计工具(支持各种文件类型)》

1. 前言

本文介绍了一款使用C#开发的代码行数统计软件。该软件允许用户通过选择文件目录和设置统计项目类型,来统计指定目录下的代码行数。软件提供了三种统计方式:按文件名统计、按文件类型统计、按文件目录统计,并能计算出包括总行数、注释行数、空行数等在内的详细数据结果。此外,软件还提供了扩展功能,允许有一定编程能力的用户自定义支持的项目类型和扩展文件名,以满足特定需求。
在这里插入图片描述

2. 功能介绍及使用

以下为软件主界面。
在这里插入图片描述

2.1 按文件统计

1、点击浏览选择需要进行统计的文件目录。

2、选择文件目录对应的项目类型,选择完成后,将显示该项目类型将要统计的文件后缀名。

3、点击统计,统计完成后,将会显示统计数据在列表中,同时底部也将显示汇总结果。

4、可以看到按文件名统计结果,其他类型的统计结果也会同步生成。

在这里插入图片描述

2.2 按文件类型统计

1、点击浏览选择需要进行统计的文件目录。

2、选择文件目录对应的项目类型,选择完成后,将显示该项目类型将要统计的文件后缀名。

3、点击统计,统计完成后,将会显示统计数据在列表中,同时底部也将显示汇总结果。

4、可以看到按文件类型统计结果,其他类型的统计结果也会同步生成。

在这里插入图片描述

2.3 按文件目录统计

1、点击浏览选择需要进行统计的文件目录。

2、选择文件目录对应的项目类型,选择完成后,将显示该项目类型将要统计的文件后缀名。

3、点击统计,统计完成后,将会显示统计数据在列表中,同时底部也将显示汇总结果。

4、可以看到按文件目录统计结果,其他类型的统计结果也会同步生成。

在这里插入图片描述

2.4 导出Execl

待统计结果出来后可点击导出结果按钮将统计结果导出为execl文件,导出的文件中将包含按文件统计、按文件类型统计、按文件目录统计三个统计结果。

在这里插入图片描述

打开看下导出的execl文件内容如下:
在这里插入图片描述

2.5 添加自定义项目支持

有一定编程能力的小伙伴可以修改本程序支持的项目类型和统计时支持的文件扩展名类型,使用Navicat打开程序目录下的DataServer.db文件,可以看到程序当前已支持的项目类型和相应的文件类型,根据需要新增项目类型(project表)、新增支持的文件类型(file_config表)。

在这里插入图片描述

在这里插入图片描述

说明:

1、project_type:项目类型。

2、file_extension:该项目统计时需要统计的文件后缀名,多个之间以英文的逗号(,)分隔。

3、file_extension:支持的文件后缀名,多个之间以英文的逗号(,)分隔。

4、code_regex:用于正则匹配代码的正则表达式。

5、single_line_comment_regex:后缀名文件对应的单行代码注释正则表达式。

6、multiLine_comment_regex:后缀名文件对应的多行代码注释正则表达式。

正则表达式一旦配置错误,将会导致程序统计结果不正确并且有可能导致程序异常,需谨慎操作。

2.6 代码片段

以下为部分代码,仅供参考

private void InitializeSQLite()
{//获取基目录,它由程序集冲突解决程序用来探测程序集。string dbPath = AppDomain.CurrentDomain.BaseDirectory + "DataServer.db";sqliteDBHelper = new SQLiteDBHelper(dbPath);if (!File.Exists(dbPath)){//创建文件和表MessageBox.Show("丢失数据库配置文件DataServer.db,程序无法运行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);Application.Exit();return;}string strSql = "select * from project order by project_type";projectDataTable = sqliteDBHelper.ExecuteDataTable(strSql, null);foreach (DataRow row in projectDataTable.Rows){projectTypeComboBox.Items.Add(row["project_type"].ToString());}if (projectTypeComboBox.Items.Count > 0){projectTypeComboBox.SelectedIndex = 0;}strSql = "select * from file_config";fileConfigDataTable = sqliteDBHelper.ExecuteDataTable(strSql, null);
}//选择文件目录
private void selectFileDirectoryButton_Click(object sender, EventArgs e)
{using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog()){folderBrowserDialog.Description = "选择文件夹";DialogResult dialogResult = folderBrowserDialog.ShowDialog();if (dialogResult == DialogResult.OK){fileDirectoryTextBox.Text = folderBrowserDialog.SelectedPath;}}
}//开始统计
private void startButton_Click(object sender, EventArgs e)
{if (string.IsNullOrEmpty(fileDirectoryTextBox.Text)){MessageBox.Show("请选择文件目录后再操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}fileExtensionList.Clear();string[] array = fileExtensionTextBox.Text.Split(',');foreach (string str in array){fileExtensionList.Add(str.Trim().ToLower());}Task task = Task.Run(() => {StartStatisticsTask();});
}private void StartStatisticsTask()
{startButton.Text = "停止统计";resultTextBox.Text = "正在统计中...";fileStatisticsDictionary = new Dictionary<string, Tuple<long, long, long>>();fileTypeStatisticsDictionary = new Dictionary<string, Tuple<long, long, long>>();fileTypeCountDictionary = new Dictionary<string, long>();fileDirectoryStatisticsDictionary = new Dictionary<string, Tuple<long, long, long>>();fileDirectoryDictionary = new Dictionary<string, int>();fileListView.Items.Clear();fileTypeListView.Items.Clear();StatisticsFiles(fileDirectoryTextBox.Text);SetFilesTabPageListViewData();SetFileTypeTablePageListViewData();SetFileDirectoryTablePageListViewData();startButton.Text = "开始统计";
}

3. 总结

该C#开发的代码行数统计软件是一款功能强大且灵活的工具,旨在帮助用户快速准确地统计文件目录中的代码行数。通过直观易用的界面和三种统计方式(文件名、文件类型、文件目录),用户可以方便地获取到包括总行数、注释行数、空行数等关键信息。软件还提供了自定义支持的项目类型和扩展文件名的功能,为用户提供了更大的灵活性和适用性。这款软件对于软件开发人员、项目管理者以及需要分析代码量的用户来说,都是一个非常实用的工具。

点击下载《代码统计工具(支持各种文件类型)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性图标绘制指南:从基础到精通

图标在生活中随处可见。相比文字来说&#xff0c;图标可以让人在更短的时间内认知并了解信息&#xff0c;并且大大提升信息的视觉美观性&#xff0c;增加设计的艺术感染力。在用户界面中使用图标&#xff0c;是一种用户熟知的设计模式。而线性图标是通过提炼图形轮廓&#xff0…

jquery动态插件之gsap和TextPlugin

<!DOCTYPE html> <html> <head><title>数字化人才认证数动画</title><script src"https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script src"https://cdnjs.cloudflare.com/ajax…

【强化学习】第02期:动态规划方法

笔者近期上了国科大周晓飞老师《强化学习及其应用》课程&#xff0c;计划整理一个强化学习系列笔记。笔记中所引用的内容部分出自周老师的课程PPT。笔记中如有不到之处&#xff0c;敬请批评指正。 文章目录 2.1 动态规划&#xff1a;策略收敛法/策略迭代法2.2 动态规划&#xf…

GD32F4时钟配置

1.前言 硬件&#xff1a;GD32F450 最高时钟频率200MHZ(外部晶振8MHZ) 软件&#xff1a;KEIL(V5.35) 固件包&#xff1a;GD32F4xx_Firmware_Library_V3.2.0 2.时钟树 时钟配置大概流程如下图红线指示&#xff0c;GD32F470的最高频率可以到240MHZ&#xff0c;GD32F450最高…

【frp】cron定时检查zfrpc.service是否启动成功

zfrpc 经常自动启动失败cron定时检查zfrpc.service是否启动成功 ChatGPT 要使用 cron 定期检查 zfrpc.service 是否启动成功,并在服务未运行时尝试启动它,你可以按照以下步骤进行操作: 创建脚本 首先,你需要创建一个脚本,这个脚本将检查 zfrpc.service 的状态,并在服务未…

字符串反转字符串单词(1)

大家好&#xff0c;今天我们来探讨一道经典的编程问题——翻转字符串里的单词。这个问题要求我们编写一个函数&#xff0c;将输入字符串中的所有单词进行翻转&#xff0c;但单词内部的字符顺序保持不变。 问题分析&#xff1a; 1. 首先&#xff0c;我们需要理解翻转字符串里的…

Codeforces Round 143 (Div. 2) C. To Add or Not to Add 题解 前缀和 二分

To Add or Not to Add 题目描述 A piece of paper contains an array of n n n integers a 1 , a 2 , . . . , a n a_{1},a_{2},...,a_{n} a1​,a2​,...,an​. Your task is to find a number that occurs the maximum number of times in this array. However, before l…

点云压缩配置开发环境遇到一些bug

1、配置基于cuda的计算库&#xff0c;Chamfer3D和pointops 编译chamfer3D时候会遇到一个cub版本的校验错误。 解决方法&#xff1a;根据错误提示&#xff0c;进入cuda的config配置文件中&#xff0c;使用#define将校验功能关闭 编译pointops&#xff0c;会遇到报错&#xff1a;…

C++Primer Plus 第十四章代码重用:14.4.4 数组模板示例和非类型参数2

14.4.4 数组模板示例和非类型参数 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右…

《分析模式》漫谈08-单继承不是“唯一继承”

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》第2章这一段&#xff1a; 划线处的single inheritance&#xff0c;2004中译本的翻译&#xff1a; 翻译为“单继承”&#xff0c;是正确的。 2020中译本的翻译&#xff1a…

Java NIO(一) 概述

NIO主要用于以少量线程来管理多个网络连接&#xff0c;处理其上的读写等事件。在大量连接情况下&#xff0c;不管是效率还是空间占用都要优于传统的BIO。 Java NIO 由以下几个核心部分组成&#xff1a; Channel Buffer Selector Selector 如果你的应用打开了多个连接&#x…

分页插件 count有数据,代码不往下执行

如下:如果打印了sql那么当row>0时会有图2下面sql详情的输出 问题出在了分页参数上,pageNum为1,并且pageSize>2才能打印出图二的结果,图一为pageNum值是0,注意,查询第一页,分页应该传入的是1而不是0

大数据批处理系统和业务系统是两种不同类型的系统,它们在目的、设计、功能和使用场景上有所区别

大数据批处理系统和业务系统是两种不同类型的系统&#xff0c;它们在目的、设计、功能和使用场景上有所区别。以下是大数据批处理系统和业务系统之间的一些主要差异&#xff1a; 1. **目的**&#xff1a; - **大数据批处理系统**&#xff1a;主要用于处理和分析大量数据&am…

MySQL高级1.0

目录 &#x1f4cc;MySQL存储过程和函数 ✏️存储过程和函数介绍 ✏️存储过程的创建和调用 ✏️存储过程的查看和删除 ✏️存储过程语法-变量 ✏️存储过程语法-if语句 ✏️存储过程语法-参数传递 ✏️存储过程语法-while循环 ✏️存储过程语法-存储函数 &#x1f4…

Linux高并发服务器开发(六)线程

文章目录 1. 前言2 线程相关操作3 线程的创建4 进程数据段共享和回收5 线程分离6 线程退出和取消7 线程属性&#xff08;了解&#xff09;8 资源竞争9 互斥锁9.1 同步与互斥9.2 互斥锁 10 死锁11 读写锁12 条件变量13 生产者消费者模型14 信号量15 哲学家就餐 1. 前言 进程是C…

【FFmpeg】avio_open2函数

【FFmpeg】avio_open2函数 1.avio_open21.1 创建URLContext&#xff08;ffurl_open_whitelist&#xff09;1.1.1 创建URLContext&#xff08;ffurl_alloc&#xff09;1.1.1.1 查找合适的protocol&#xff08;url_find_protocol&#xff09;1.1.1.2 为查找到的URLProtocol创建UR…

影响Cache命中率的因素有哪些?

缓存命中率&#xff08;Cache Hit Rate&#xff09;是指处理器访问缓存时&#xff0c;所需数据已经在缓存中找到的次数与总访问次数的比例。提高缓存命中率可以显著提升系统性能&#xff0c;因为缓存访问速度远快于主存访问速度。影响缓存命中率的关键因素包括&#xff1a; 1.…

C语言异常处理就机制setjmp()和longjmp()

C语言setjmp()和longjmp()实现异常处理机制。 setjmp() 用于保存当前的程序执行状态。 longjmp() 用于在后面的某个时刻返回到setjmp()点的状态。 类似goto。但goto是本地的&#xff0c;只能在函数内部跳转。 setjmp()和longjmp()是非局部跳转语句&#xff0c;可在调用栈上&a…

通信系统网络架构_3.移动通信网络架构

移动通信网为移动互联网提供了强有力的支持&#xff0c;尤其是5G网络为个人用户、垂直行业等提供了多样化的服务。以下从业务应用角度给出面向5G网络的组网方式。 1.5GS与DN互连 5GS&#xff08;5G System&#xff09;在为移动终端用户&#xff08;User Equipment&#xff0c;…

CSRF的其他防范措施?

一般情况下&#xff0c;我们可以通过各种防护策略来防御CSRF&#xff0c;对于QA、SRE、安全负责人等&#xff0c;我们可以做哪些事情来提升安全性呢&#xff1f; 一、CSRF测试 CSRFTester是一款CSRF漏洞的测试工具&#xff0c;CSRFTester工具的测试原理大概是这样的&#xff…