递归 计算代码
2015-06-10 15:06
369 查看
mj 笔记
// // main.m // 04-计算代码行数 // // Created by apple on 13-8-12. // Copyright (c) 2013年 itcast. All rights reserved. // /* * 考察NSString、NSArray的使用 * NSFileManager */ #import <Foundation/Foundation.h> // 计算文件的代码行数 /* path : 文件的全路径(可能是文件夹、也可能是文件) 返回值 int :代码行数 */ NSUInteger codeLineCount(NSString *path) { // 1.获得文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; // 2.标记是否为文件夹 BOOL dir = NO; // 标记是否为文件夹 // 标记这个路径是否存在 BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; // 3.如果不存在,直接返回0 if(!exist) { NSLog(@"文件路径不存在!!!!!!"); return 0; } // 代码能来到着,说明路径存在 if (dir) { // 文件夹 // 获得当前文件夹path下面的所有内容(文件夹、文件) NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; // 定义一个变量保存path中所有文件的总行数 int count = 0; // 遍历数组中的所有子文件(夹)名 for (NSString *filename in array) { // 获得子文件(夹)的全路径 NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename]; // 累加每个子路径的总行数 count += codeLineCount(fullPath); } return count; } else { // 文件 // 判断文件的拓展名(忽略大小写) NSString *extension = [[path pathExtension] lowercaseString]; if (![extension isEqualToString:@"h"] && ![extension isEqualToString:@"m"] && ![extension isEqualToString:@"c"]) { // 文件拓展名不是h,而且也不是m,而且也不是c return 0; } // 加载文件内容 NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; // 将文件内容切割为每一行 NSArray *array = [content componentsSeparatedByString:@"\n"]; // 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/ NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"]; NSString *str = [path stringByReplacingCharactersInRange:range withString:@""]; // 打印文件路径和行数 NSLog(@"%@ - %ld", str, array.count); return array.count; } } int main() { NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享"); NSLog(@"%ld", count); return 0; } void test() { NSString *str = @"jack\nrose\njim\njake"; [str writeToFile:@"/Users/apple/Desktop/abc.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSArray *array = [str componentsSeparatedByString:@"\n"]; for (NSString *line in array) { NSLog(@"%@", line); } //int count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/0811/代码/04-block/04-block/main.m"); //NSLog(@"count=%d", count); }
相关文章推荐
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- Javascript递归打印Document层次关系实例分析
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件
- JavaScript的递归之递归与循环示例介绍
- C# 递归查找树状目录实现方法
- 全排列算法的非递归实现与递归实现的方法(C++)
- php递归列出所有文件和目录的代码
- java递归菜单树转换成pojo对象
- 一个JavaScript递归实现反转数组字符串的实例
- Java中的递归详解(用递归实现99乘法表来讲解)
- C语言的递归思想实例分析
- php通过递归方式复制目录和子目录的方法
- php递归法读取目录及文件的方法
- php实现递归与无限分类的方法