算法积累:解决如何获取指定文件夹路径或者文件路径下所有子文件后缀为.h .m .c的文本的行数

简介:

1、先解决如何获取一个文件的代码行数

一开始对于这个问题,我的思路就回荡在:1字符串子字符串的判断 2循环直到结束的想法 3将原来是"\n"替换掉之类的想法

一个问题总会有多种解决方案,下面的解决方案来自MJ基础视频里讲过的方案,挺不错的,基本思路是:通过"\n"拆分字符串到OC数组中,最后判断数组的长度即可。

虽然有时候我们可能想不到更好的方法,但是也不能阻拦我们去积累好的方法,所以纪录在此博文中。

学习来自 MJ 的某个基础视频

2、然后进一步考虑一个目录下的所有文件以及目录下的子文件的行数

思路:<1>这样的话,首先要处理 path 可以是文件所在目录,也可以是文件夹所在的目录。所以就需要NSFileManager对象来处理文件和文件夹。

  NSFileManager可以判断当前目录是对应的文件还是文件夹。

<2>当如果是文件的话,就执行上面的程序,输出文件的行数。

<3>当如果是文件夹的话,就需要继续执行方法<1>所以这里就需要用递归来处理这种需要重复执行包含的内容。

下面就直接给出MJ的代码:

复制代码
 1 #import <Foundation/Foundation.h>
 2  3 void codeLine(NSString *path)
 4 {
 5 //需要获取的内容  6 NSString* content;
 7 //获取NSFileManager的单例对象  8 NSFileManager *manager = [NSFileManager defaultManager];
 9 //判断path是文件还说路径 10 BOOL isDir;//是否为文件夹 11 BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 12 13 if (!isExist) {
14 NSLog(@"路径下的目录或文件 不存在的");
15  }
16 17 if (isDir) {
18 NSLog(@"是目录文件夹。");
19 //就需要打印所有的子文件夹 20 NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
21 //遍历数组中所有的文件和目录 22 for (NSString* fileName in dirArray) {
23 NSString* fileNames = [NSString stringWithFormat:@"%@/%@",path,fileName];
24 NSLog(@"%@",fileNames);
25 //然后递归调用,遇到文件名就输出行数 26  codeLine(fileNames);
27  }
28 }else{
29 content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
30 NSArray *array = [content componentsSeparatedByString:@"\n"];
31 //获取文件的行数 32 NSLog(@"行数是:%lu",(unsigned long)array.count);
33  }
34 }
35 36 int main(int argc, const char * argv[]) {
37  @autoreleasepool {
38 // /Users/HeYang/Desktop/HTTP 39 NSString* path = @"/Users/HeYang/Desktop/HTTP";
40  codeLine(path);
41  }
42 return 0;
43 }
复制代码

3、然后进一步解决的问题是:文件为后缀.h .m .c的文本

复制代码
 1 #import <Foundation/Foundation.h>
 2  3 int codeLine(NSString *path)
 4 {
 5 //需要获取的内容  6 NSString* content;
 7 //获取NSFileManager的单例对象  8 NSFileManager *manager = [NSFileManager defaultManager];
 9 //判断path是文件还说路径 10 BOOL isDir;//是否为文件夹 11 BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 12 13 if (!isExist) {
14 NSLog(@"路径下的目录或文件 不存在的");
15 return 0;
16  }
17 NSArray *array;
18 NSString *fullFileName;
19 if (isDir) {
20 //就需要打印所有的子文件夹 21 NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
22 //遍历数组中所有的文件和目录 23 for (NSString* fileName in dirArray) {
24 fullFileName = [NSString stringWithFormat:@"%@/%@",path,fileName];
25 //然后递归调用,遇到文件名就输出行数 26  codeLine(fullFileName);
27  }
28 return 0;
29 }else{
30 //还需要判断非指定文件名后缀的文件 31 NSString *extends = [path pathExtension];
32 if (![extends isEqualToString:@"h"]
33 && ![extends isEqualToString:@"c"]
34 && ![extends isEqualToString:@"m"]){
35 return 0;
36  }
37 content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
38 array = [content componentsSeparatedByString:@"\n"];
39  }
40 NSLog(@"%@ 的行数是:",path);
41 //获取文件的行数 42 NSLog(@"行数是:%lu",(unsigned long)array.count);
43 return 0;
44 }
45 46 int main(int argc, const char * argv[]) {
47  @autoreleasepool {
48 // /Users/HeYang/Desktop/HTTP 49 NSString* path = @"/Users/HeYang/Desktop/HTTP";
50  codeLine(path);
51  }
52 return 0;
53 }
复制代码

相关文章
|
3月前
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
|
5月前
|
存储 SQL 算法
LeetCode题目113:多种算法实现 路径总和ll
LeetCode题目113:多种算法实现 路径总和ll
|
24天前
|
数据采集 监控 安全
厂区地图导航制作:GIS技术与路径导航算法融合
在智能化、数字化时代,GIS技术为厂区的运营管理带来了革命性变化。本文探讨了如何利用GIS技术,通过数据采集、地图绘制、路径规划、位置定位和信息查询等功能,打造高效、精准的智能厂区地图导航系统,提升企业的竞争力和管理水平。
32 0
厂区地图导航制作:GIS技术与路径导航算法融合
|
28天前
|
存储 算法 Java
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
前缀(波兰)表达式、中缀表达式和后缀(逆波兰)表达式的基本概念、计算机求值方法,以及如何将中缀表达式转换为后缀表达式,并提供了相应的Java代码实现和测试结果。
29 0
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
|
2月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
45 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
3月前
|
算法
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。
|
3月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
132 0
|
4月前
|
机器学习/深度学习 数据采集 算法
Python基于KMeans算法进行文本聚类项目实战
Python基于KMeans算法进行文本聚类项目实战
162 19
|
3月前
|
算法 数据可视化 搜索推荐
基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验
本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。
|
4月前
|
文字识别 算法 Java
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id