[OC Foundation框架 - 20] 统计代码行数

时间:2021-09-30 23:00:55

注意:

1.变量名和函数名不要混淆调用
2.不要对文件夹进行文件的操作,没有权限
3.递归调用注意初始化变量
 
 //
// main.m
// CodeLineCount
//
// Created by hellovoidworld on 14-11-18.
// Copyright (c) 2014年 com.hellovoidworld. All rights reserved.
// #import <Foundation/Foundation.h> // 计算文件夹或文件内所有代码行数
NSInteger codeLineCount(NSString *path)
{
NSError *error; // 单例模式创建 NSFileManager
NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isDirectory = NO;
BOOL isFileExist = [fileManager fileExistsAtPath:path isDirectory:&isDirectory]; // 文件是否存在
if (!isFileExist)
{
NSLog(@"%@-->文件或文件夹不存在!", path);
return ;
} // 如果是文件夹,进行递归调用
if (isDirectory)
{
// NSLog(@"文件夹: %@", path); NSInteger lineCount = ; // 代码行数 // 获取文件夹下的所有内容,包括子文件夹和文件
NSArray *subPaths = [fileManager contentsOfDirectoryAtPath:path error:&error]; if (error != nil)
{
NSLog(@"Fail to read the directory, the error is %@", error);
} for (NSString *subPath in subPaths)
{
NSString *fullSubPath; // 全路径的文件名
fullSubPath = [NSString stringWithFormat:@"%@/%@", path, subPath]; // 取出来的文件名不带路径
lineCount += codeLineCount(fullSubPath);
} return lineCount;
}
else
{
NSInteger lineCount = ; // 代码行数 // 取得文件扩展名
NSString *fileExtension = [[path pathExtension] lowercaseString]; // 过滤非代码文件
if (![fileExtension isEqualToString:@"h"]
&& ![fileExtension isEqualToString:@"m"]
&& ![fileExtension isEqualToString:@"c"])
{
return ;
} NSString *fileContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; if (error != nil)
{
NSLog(@"Read fail, error is %@", error);
} NSArray *codeLinesArray = [fileContent componentsSeparatedByString:@"\n"];
lineCount = [codeLinesArray count]; NSLog(@"%@的代码行数是%ld", path, lineCount);
return lineCount;
}
} int main(int argc, const char * argv[]) {
@autoreleasepool { NSInteger lineCount = codeLineCount(@"/Users/hellovoidworld/Study");
NSInteger lineCount2 = codeLineCount(@"/Users/hellovoidworld/Desktop/oc"); NSLog(@"所有源码文件的总行数是%ld", lineCount + lineCount2); } return ;
}

[OC Foundation框架 - 20] 统计代码行数的更多相关文章

  1. Eclipse统计代码行数

    开发过程中,经常需要统计代码行数,这时可以通过Eclipse的Search功能来实现. 步骤: 1.在Package Explorer中选中需要统计的包: 2.单击菜单Search-->File ...

  2. 在Flash Builder或者Eclipse统计代码行数的方法

    在Flash  Builder或者Eclipse统计代码行数的方法如下图菜单栏--搜索--搜索文件

  3. 【Linux】常用命令-统计代码行数

    公司人员流动大,经常有新的维护任务,交接时喜欢看看新来的模块的代码量,那么问题来了, 如何统计代码行数? 1,最先想到的肯定是 wc. wc -l *.h 将查看[当前目录]下头文件的代码行数,输出结 ...

  4. c&num;统计代码行数

    小编,已经快学了两年编程了.昨天突发奇想,想统计下这些年到底写过多少行代码,于是做了一个这个小程序来统计代码行数.老规矩,先上图. 比较惭愧,写了两年只有2万多行.那我们还是进入下一项吧. 界面搭建我 ...

  5. 【未解决】对于使用Windows的IDEA进行编译的文件,但无法在Linux系统中统计代码行数的疑问

    在我学习使用Windows的IDEA的过程中,将代码文件转移到Linux虚拟机当中,但无法在Linux系统中统计代码行数. 注意:拷贝进虚拟机的文件均能编译运行. 具体过程如下: root@yogil ...

  6. Visual Studio 统计代码行数

    介绍一种简单的统计代码行数的小技巧, 使用正则表达式,用VS强大的查找功能 b[^:b#/]+.$ 最后结果:

  7. 用django统计代码行数&plus;注释行数

    实现统计代码行数: 1.首先在url.py中配置 from django.conf.urls import url from django.contrib import admin from app0 ...

  8. cloc 统计代码行数工具

    cloc 统计代码行数工具 官网地址:http://cloc.sourceforge.net/ 下载完成后 会生成一个.exe文件 需要修改文件名为 cloc.exe 然后把这个文件拷贝到需要统计的根 ...

  9. python统计代码行数

    以前写了一个java的统计代码行数的小程序,最近在看python,于是就参考前辈的代码,写了一个统计文件夹下面各种程序的代码的小程序,这里贴出来供大家参考 参考链接: https://gist.git ...

随机推荐

  1. asp&period;net-枚举绑定控件

    1.DropDownList asp.net页面: <asp:DropDownList ID="drpTemplateType" runat="server&quo ...

  2. MVC强类型视图、强类型HTML辅助方法

    强类型视图: <table> <tr> <td>ID:</td><td><%: Model.Id %></td> & ...

  3. 如何设置WebViewer的参数栏显示状态

    当为用户提供数据过滤功能时,需要为报表添加参数,而很多应用场景下,在初次展现报表时就为报表会展现全部的数据,然后再通过参数供用户选择,从而实现数据过滤,而一旦为参数设置默认值,参数面板就会自动隐藏.导 ...

  4. Android Listview &amp&semi; Adapter

    Listview主要有两个职责: 将数据填充到布局 处理用户的选择点击等操作 列表的显示需要三个元素: ListVeiw 用来展示列表的View 适配器(Adapter) 用来把数据映射到ListVi ...

  5. 在Hadoop-2&period;2&period;0集群上安装 Hive-0&period;13&period;1 with MySQL

    fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3872872.html 软件环境 操作系统:Ubuntu14.04 JDK版本:jdk1 ...

  6. ssh原理

     客户端向服务器端发出连接请求 服务器端向客户端发出自己的公钥 客户端使用服务器端的公钥加密通讯密钥然后发给服务器端 如果通讯过程被截获,由于窃听者即使获知公钥和经过公钥加密的内容,但不拥有私 ...

  7. SGU 176 【带上下界的有源汇的最小流】

    ---恢复内容开始--- 题意: 给了n个点,m条有向边. 接下来m行,每条边给起点终点与容量,以及一个标记. 标记为1则该边必须满容量,0表示可以在容量范围内任意流. 求: 从源点1号点到终点n号点 ...

  8. C&num; 获得两日期之间所有月份&lpar;包括跨年&rpar;

    前台: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  9. spark高级编程

    启动spark-shell 如果你有一个Hadoop 集群, 并且Hadoop 版本支持YARN, 通过为Spark master 设定yarn-client 参数值,就可以在集群上启动Spark 作 ...

  10. bzoj2721 &sol; P1445 &lbrack;Violet&rsqb;樱花

    P1445 [Violet]樱花 显然$x,y>n$ 那么我们可以设$a=n!,y=a+t(t>0)$ 再对原式通分一下$a(a+t)+ax=x(a+t)$ $a^{2}+at+ax=ax ...