本发明涉及项目管理技术领域,尤其涉及的是一种项目文件名批量自动替换方法。
背景技术:
在软件项目开发的过程中,因为开发人员个人习惯的问题,代码命名不一定统一,在代码整理存档或者迁移到新项目时,就需要进行一个统一的命名整理工作。替换一个文件名就需要修改若干处关联的代码,不仅费时费力,而且容易出错。在大型项目中替换的工作量将成指数级的增长。在旧的项目整理、代码迁移的过程中,经常需要进行文件名整理替换的工作,人工替换将花费大量的时间与精力,而且容易出现错误的情况。
因此,现有技术存在缺陷,需要改进。
技术实现要素:
本发明所要解决的技术问题是针对现有技术的不足提供一种项目文件名批量自动替换方法。
本发明的技术方案如下:
一种项目文件名批量自动替换方法,首先在白名单中添加筛选条件,根据该筛选条件遍历获取工程目录下所有的文件,过滤出需要替换的文件;然后获取所有代码文件名以及可能需要修改的文件内容,在可能需要修改的文件内容中进行正则匹配,匹配成功对其进行修改替换;最后把替换后的内容写入原来的文件。
所述的项目文件名批量自动替换方法,包括以下具体步骤:
步骤1:过滤筛选步骤:设置过滤筛选条件白名单,通过在白名单中添加文件名、文件类型或者文件夹路径等筛选条件,过滤出需要替换的文件;
步骤2:智能去重步骤:过滤后的代码文件,先读入代码文件中的内容,如果代码文件引用了文件名,则只加载代码文件;如果代码文件使用了该文件名对应文件的内容中的代码,则需要加载代码文件及其头文件,若代码文件未使用该文件名对应文件的内容中的代码且未引用该文件名则不需要加载任何的内容,只把可能需要修改的内容读入内存;
步骤3:读取用户希望的替换规则;
步骤4:系统会遍历内存中的文件内容,通过正则表达式的方式来寻找需要替换的文件名;如果通过正则表达式未匹配上,会智能切换完全搜索模式,通过遍历所有文件内容,进行字符串搜索,来确保不会出现遗漏。
步骤5:在内存中对搜索到的结果进行替换,当所有替换完成后再写回原文件。
所述的项目文件名批量自动替换方法,筛选条件包括文件名、文件类型或者文件夹路径。
所述的项目文件名批量自动替换方法,替换规则为:原名精确替换,前缀批量添加,前缀批量替换,前缀批量过滤,还支持简单替换,只需输入当前有的前缀,会智能判断是需要添加还是替换新的前缀。
所述的项目文件名批量自动替换方法,正则表达式的匹配规则为:以原始的文件名作为关键词,在所有文件内容中匹配关键词两端存在单词边界的情况;单词边界是单词和符号之间的边界,匹配得到单词边界后继续匹配前后是否出现加号。有单词边界,且未出现加号的就是匹配成功,表示需要进行替换。
所述的项目文件名批量自动替换方法,单词可以是中文字符、英文字符及数字;符号可以是中文符号、英文符号、空格、制表符及换行。
使用本发明能在10分钟内完成3000个文件,50万行代码的整理替换工作。解决了人工替换时间长,容易出错的问题。
具体实施方式
以下结合具体实施例,对本发明进行详细说明。
本发明提供了文件白名单指定规则替换功能,可以简便的替换为目标格式。首先通过在白名单中添加文件名、文件类型或者文件夹路径等筛选条件,根据该筛选条件遍历获取工程目录下所有的文件,过滤出需要替换的文件。
然后获取所有代码文件名以及可能需要修改的文件内容,在可能需要修改的文件内容中进行正则匹配,匹配成功对其进行修改替换。
最后把替换后的内容写入原来的文件。这里可以根据用户自定义规则进行替换,也可以使用默认规则进行替换。
包括以下具体步骤:
步骤1:过滤筛选步骤:设置过滤筛选条件白名单,通过在白名单中添加文件名、文件类型或者文件夹路径等筛选条件,过滤出需要替换的文件,支持通过“路径”、“文件名”、“文件类型”3种方式来对目标代码文件进行过滤筛选,经过这次过滤可以大大的加快处理速度。
步骤2:智能去重步骤:过滤后的代码文件,先读入代码文件中的内容,如果代码文件引用了文件名,则只加载代码文件。如果代码文件使用了该文件名对应文件的内容中的代码,则需要加载代码文件及其头文件,若代码文件未使用该文件名对应文件的内容中的代码且未引用该文件名则不需要加载任何的内容,只把可能需要修改的内容读入内存。
例如,在ios软件开发中,一个类由头文件“类名.h”和源文件“类名.m”两个文件组成。步骤1过滤筛选出来的文件进行排重操作,得到一组不重复的类名。在工程所有文件中搜索这些类名,对于每一个文件,需进行以下2个条件判断:条件1、这些类名是否在文件中有引用(即头文件被使用)。条件2、文件中是否通过这些类名创建了实例对象或者调用了方法(即源文件被使用)。只要满足了条件2,就需要同时加载该文件对应类的头文件和源文件。如果仅满足了条件1,则只需要加载该文件对应类的头文件即可。若都不满足则不需要加载。通过分析只把可能需要修改的内容读入内存,加快了程序的处理速度。(类是面向对象程序设计实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。)
步骤3:读取用户希望的替换规则,例如替换规则为:原名精确替换,前缀批量添加,前缀批量替换,前缀批量过滤,还支持简单替换,只需输入当前有的前缀,会智能判断是需要添加还是替换新的前缀。
步骤4:系统会遍历内存中的文件内容通过正则表达式的方式来寻找需要替换的文件名。
正则表达式(regularexpression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。通过对ios中常见文件、常用命名进行分析,同时进行了大量的实验,最终得出本发明的关键匹配规则,通过正则表达式的单词边界加条件过滤来匹配目标文件名。
具体的匹配规则如下:以原始的文件名作为关键词,在所有文件内容中匹配关键词两端存在单词边界的情况;单词边界是单词和符号之间的边界,单词可以是中文字符、英文字符及数字。符号可以是中文符号、英文符号、空格、制表符及换行,匹配得到单词边界后继续匹配前后是否出现加号。有单词边界,且未出现加号的就是匹配成功,表示需要进行替换。
通过此规则,能准确快速的匹配到需要替换的内容。
另外也提供了完全搜索模式,如果通过正则未匹配上,会智能切换完全搜索模式,通过遍历所有文件内容,进行字符串搜索,来确保不会出现遗漏。
步骤5:在内存中对搜索到的结果进行替换,当所有替换完成后再写回原文件。这样做可以避免文件的频繁读取,大大的提高了程序的运行速度。
使用本发明能在10分钟内完成3000个文件,50万行代码的整理替换工作。解决了人工替换时间长,容易出错的问题。
例如,在lemoapp的ios客户端代码整理的过程中,我们需要替换工程“modules”目录及其子目录下的所有文件名,这些文件有些是以“yw”开头的也有直接以内容命名的。我们需要把“yw”开头的文件名替换为“vst”开头,对于直接以内容命名的,我们需要在前面补上“vst”。同时还需要对工程中所有代码文件里引用到这个文件的地方进行替换。通过本发明,我们只需要简单设置一下,就能快速、准确的完成这个任务。
首先我们设置好需要替换的工程文件的路径“/vostucios/modules”。然后在白名单中添加上需要参与替换的文件类型的后缀名集合“[c,m,h,mm,pch]”,c,m,h,mm,pch均代表一种后缀名,通过文件后缀来筛选,多种类型后缀名之间用逗号隔开。
最后设置上需要替换的规则,例如这里我们设置上“yw”替换成“vst”,点击执行就可以了。等待处理完成后,指定路径中所有的文件名全部添加或替换成“vst”开头的文件名,另外,在整个工程代码中,如果对该路径下文件有引用的地方,也全部自动进行了匹配修改。通过本发明,大大的降低了时间成本,增加了替换的准确性,更好、更快的完成了任务。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。