最近手头的项目基本上已经完结,历经了5个月的开发和迭代,各种的需求调整,想对自己的代码量进行一个客观的计算,于是抽了点时间写下了这个小demo,朋友们有需要的可以看看,很简单。

基本的思想就是:根目录->递归的遍历所有文件夹>计算具体某一文件的代码行数

具体流程如下:

#pragma mark---------------------->递归文件夹下文件

- (void)recordFilePathWithPath:(NSString *)path{

/*        文件管理器         */

NSFileManager *manager = [NSFileManager defaultManager];

/*        该目录下文件存在的情况下  是否为文件夹bool值         */

BOOL ret = NO;

/*        文件是否存在bool值         */

BOOL fileExist = [manager fileExistsAtPath:path isDirectory:&ret];

/*        文件存在时         */

if (fileExist) {

/*        该目录为文件夹时         */

if (ret) {

/*        该目录下的所有文件         */

NSArray *arr = [manager contentsOfDirectoryAtPath:path error:nil];

for (NSString *secondPath in arr) {

/*        拼接地址         */

NSString *newPath = [path stringByAppendingPathComponent:secondPath];

/*        递归文件夹下文件         */

[self recordFilePathWithPath:newPath];

}

}else{

/*        该目录为文件时 筛选出合适的文件  博主暂订这几种文件 当然还有.mm文件 如果您的项目中存在 可以添加上去         */

if ([path hasSuffix:@".h"]||[path hasSuffix:@".m"]||[path hasSuffix:@".swift"]||[path hasSuffix:@".pch"]) {

/*        将该目录添加到文件目录数组中         */

[_pathArr addObject:path];

}

}

}

}

以下是简单的流程操作

- (void)viewDidLoad {

[super viewDidLoad];

_pathArr = [NSMutableArray array];

/*        要计算项目的根目录 请根据您的需求添加url         */

NSString *basePath = @"/Users/JH/Desktop/项目/公司项目/CRM资料/CRMCJ_JIANHAO/CRMCJ/Resource";

/*        递归函数 递归并存储所有的.h .m .swift等代码文件        */

[self recordFilePathWithPath:basePath];

/*        总代码行数         */

long allCount = 0;

/*        遍历之前统计出来的文件目录  逐个计算行数         */

for (NSString *path in _pathArr) {

/*        将文件内容取出         */

NSString * str = [NSString stringWithContentsOfFile:path encoding:kCFStringEncodingUTF8 error:nil];

/*        根据换行符切割字符串 并存入数组         */

NSArray * arr = [str componentsSeparatedByString:@"\n"];

/*        数组个数         */

NSInteger count = [arr count];

/*        遍历切割的字符串数组         */

for (NSString * lineStr in arr) {

/*        当为注释文件时或者空白行时不添加         */

if ([lineStr hasPrefix:@"//"]||([lineStr rangeOfString:@"/*"].length>0&&[lineStr rangeOfString:@"*/"].length>0)||[[lineStr componentsSeparatedByString:@" "] count]==lineStr.length+1) {

count -- ;

}

}

allCount += count;

}

/*        展示行数         */

_showLabel.text = [NSString stringWithFormat:@"当前文件代码行数为:%ld 行",allCount];

}

demo的github地址为:https://github.com/China131/JHCodeLinesCountDemo.git 需要代码的朋友可以看看,demo比较简单,在这就不索取start了

一个简单的代码计算行数demo编写的更多相关文章

  1. 在Windows cmd中计算行数

    本文主体来自这篇外文文章的翻译.原文中有一个副标题:"如何简单地用Windows自带的FIND在CMD.exe中计算行数" 当我们在命令行环境中工作时,能计算其它工具输出内容的行数 ...

  2. 手把手制作一个简单的IDEA插件(环境搭建Demo篇)

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...

  3. curl太复杂难用记不住?来试试Httpie一个简单的现代化命令行Http客户端

    HTTPie 是一个简单的现代化命令行 HTTP 客户端. 交互友好,JSON支持,语法高亮,类wget下载,支持拓展等 功能特性 自然而且简单的命令语句 格式化且高亮显示输出内容 内置 JSON 支 ...

  4. 计算代码行数Demo源码

    源码下载:04-计算代码行数.zip24.1 KB////  main.m//  计算代码行数////  Created by apple on 13-8-12.//技术博客http://www.cn ...

  5. Android 简单统计文本文件字符数、单词数、行数Demo

    做的demo是统计文本文件的字符数.单词数.行数的,首先呢,我们必须要有一个文本文件.所以我们要么创建一个文本文件,并保存,然后再解析:要么就提前把文本文件先放到模拟器上,然后检索到文本名再进行解析. ...

  6. C++统计代码注释行数 & 有效代码行数 & 代码注释公共行 & 函数个数

    问题来源,在14年的暑假的一次小项目当中遇到了一个这样的问题,要求统计C++代码的注释行数,有效代码行数,代码注释公共行数,以及函数个数. 下面稍微解释一下问题, 1)注释行数:指有注释的行,包括有代 ...

  7. UITableView!别再用代码计算行高了(一)

    你还在用代码去计算行高吗?你不感觉那种方式很low吗?从今天起,试着做些改变吧! 别给我讲你喜欢写代码的感觉,你就是要用代码去计算行高,那我这篇文章不适合你. 在讲解复杂内容之前,还是先学习简单的内容 ...

  8. 如何利用C# Roslyn编译器写一个简单的代码提示/错误检查?

    OK, 废话不多说,这些天在写C#代码时突然对于IDE提示有了一些想法,之前也有了解过,不过并没有深入. 先看个截图: 一段再简单不过的代码了,大家注意看到 count 字段下面的绿色波浪线了吗,我们 ...

  9. Excel 一个工作表进行按行数拆分

    1. 如下Excel表,总共有120多行数据,如何将以50行数据为一个工作表进行拆分 Sub ZheFenSheet() Dim r, c, i, WJhangshu, WJshu, bt As Lo ...

随机推荐

  1. 【解决】同一url的http请求所获取的结果总是相同

    曾经在WP7写过一个通过HTTP获取网页内容的小程序,当时一直没能够解决: 有一个网址,在每次点击刷新之后页面所呈现的内容都是不同的.但是进行HTTP请求时,结果将会一直重复. 从网上查资料得知,在请 ...

  2. Ruby类的继承

    Ruby继承的语法 class DerivedClass < BaseClass #some stuff end < 为继承符号 重写(override) 的概念 有时, 我们希望子类从父 ...

  3. Redis命令

    redis的常用命令主要分为两个方面.一个是键值相关命令.一个是服务器相关命令(redis-cli进入终端) 1.键值相关命令 keys * 取出当前所有的key exists name 查看n是否有 ...

  4. NSFileManager

    //返回一个字符串数组(子路径), 并且不包含文件夹 [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath erro ...

  5. 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。

    split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...

  6. qt-4.8.5 显示图片居中笔记

    已经太久没有写过qt的程序了,所以导致的后果就是一个很简单的程序写了老半天还没写完整. 今天想实现的功能在原来软件的基础上显示他的版本. 因为想在该界面显示一个logo,一开始在pc机上跑发现图片一直 ...

  7. 八数码问题:C++广度搜索实现

    毕竟新手上路23333,有谬误还请指正. 课程设计遇到八数码问题(这也是一坨),也查过一些资料并不喜欢用类函数写感觉这样规模小些的问题没有必要,一开始用深度搜索却发现深搜会陷入无底洞,如果设定了深度限 ...

  8. 基于HTK语音工具包进行孤立词识别的使用教程

    选自:http://my.oschina.net/jamesju/blog/116151 1前言 最近一直在研究HTK语音识别工具包,前几天完成了工具包的安装编译和测试,这几天又按耐不住好奇,决定自己 ...

  9. VirtualBox中安装Ubuntu12.04/Ubuntu14.04虚拟机

    NOTE: 一开始安装的Ubuntu12.04,后来又重新安装了14.04.截图基本使用了安装12.04时的截图,后来安装14.04时又补充了几张.该安装过程对Ubuntu12.04和14.04都是适 ...

  10. POCO浅探

    POCO作用类似于POJO.POJO的内在含义是指那些从来没有任何类继承.也没有实现任何接口,更是没有被其他框架侵入的JAVA对象.POCO的含义与此是一致的.POJO的意义就在于它的简单灵活性,能够 ...