CN115357286B - 一种程序文件对比方法、装置、电子设备及存储介质 - Google Patents

一种程序文件对比方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN115357286B
CN115357286B CN202210925288.8A CN202210925288A CN115357286B CN 115357286 B CN115357286 B CN 115357286B CN 202210925288 A CN202210925288 A CN 202210925288A CN 115357286 B CN115357286 B CN 115357286B
Authority
CN
China
Prior art keywords
program file
content
analysis
format
contents
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210925288.8A
Other languages
English (en)
Other versions
CN115357286A (zh
Inventor
徐志彬
王军
柴晨
张丁一
喻文强
张琦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Securities Co Ltd
Original Assignee
China Securities Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Securities Co Ltd filed Critical China Securities Co Ltd
Priority to CN202210925288.8A priority Critical patent/CN115357286B/zh
Publication of CN115357286A publication Critical patent/CN115357286A/zh
Application granted granted Critical
Publication of CN115357286B publication Critical patent/CN115357286B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明实施例提供了一种程序文件对比方法、装置、电子设备及存储介质,涉及计算机技术领域。该方法包括:获取待进行对比的第一程序文件和第二程序文件;按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,得到所述第一程序文件和第二程序文件的差异内容。通过本方案可以提升程序文件对比的准确率。

Description

一种程序文件对比方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术领域,特别是涉及一种程序文件对比方法、装置、电子设备及存储介质。
背景技术
客户端一般是由多个服务器提供服务。但是,由于一些原因,多个服务器中用于提供客户端对应服务的程序文件,可能存在差异,因此,需要识别各个程序文件的差异内容,以在识别到差异内容后,基于差异内容进行程序文件的修复,从而保证多个服务器中的程序文件保持一致。
相关技术中,采用逐行对比代码内容的方式,识别两个程序文件对比的差异内容。
然而,由于不同程序文件中包含的各个代码内容的顺序可能不一致,若采用相关技术进行对比,会将代码内容相同但代码顺序不同的代码内容,识别为差异内容,此时,程序文件对比的准确率较低。因此,如何提升程序文件对比的准确率是亟待解决的问题。
发明内容
本发明实施例的目的在于提供一种程序文件对比方法、装置、电子设备及存储介质,以提升程序文件对比的准确率。具体技术方案如下:
第一方面,本发明实施例提供了一种程序文件对比方法,包括:
获取待进行对比的第一程序文件和第二程序文件;其中,所述第一程序文件和第二程序文件均为目标格式的程序文件;
按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;其中,各个第一解析内容和各个第二解析内容中的任一解析内容为成对出现的开始标签和结束标签,以及开始标签和结束标签之间的包含有键和键值的代码内容;
基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,得到所述第一程序文件和第二程序文件的差异内容。
可选地,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,得到所述第一程序文件和第二程序文件的差异内容,包括:
将指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对;其中,指定解析内容中的解析内容包含有相同的、成对出现的开始标签和结束标签;
若基于比对结果确定出任一第一解析内容符合第一指定条件,则将该第一解析内容确定为第一类差异内容;其中,所述第一类差异内容为相对于第一程序文件而言,在第二程序文件中删除的内容;所述第一指定条件为与每一第二解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第二解析内容符合第二指定条件,则将该第二解析内容确定为第二类差异内容;其中,所述第二类差异内容为相对于第一程序文件而言,在第二程序文件中增加的内容;所述第二指定条件为与每一第一解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第一解析内容和任一第二解析内容的对比结果为指定结果,则将该第一解析内容和该第二解析内容确定为第三类差异内容;其中,所述第三类差异内容为相对于第一程序文件而言,在第二程序文件中修改的内容,所述指定结果为存在的键均相同且所存在的均相同的键对应的至少一个键值不同,或者,存在相同的键且存在不同的键;
并且,将解析得到的各个第一解析内容中的、除所述指定解析内容所包含的第一解析内容以外的其他第一解析内容,确定为第一类差异内容;将解析得到的各个第二解析内容中的、除所述指定解析内容所包含的第二解析内容以外的其他第二解析内容,确定为第二类差异内容。
可选地,任一程序文件的文件格式包括:第一类格式、第二类格式或第三类格式;其中,所述第一类格式为ini或properties文件格式;所述第二类格式为xml文件格式;所述第三类格式为yaml或json文件格式。
可选地,所述按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容,包括:
若目标格式为第一类格式,根据第一类格式对应的语法识别第一程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第一代码内容,以及第二程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第二代码内容,根据用于表征所述第一类格式的程序文件中的开始标签和结束标签,逐行对所述第一代码内容和所述第二代码内容进行解析,将第一程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第一代码内容解析后的内容作为所述第一程序文件中的各个第一解析内容,将第二程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第二代码内容解析后的内容作为所述第二程序文件中的各个第二解析内容;
若目标格式为第二类格式,利用第二类格式对应的解析工具包,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容;
若目标格式为第三类格式,将所述第一程序文件和所述第二程序文件的格式转换为第二类格式,利用第二类格式对应的解析工具包,分别对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容。
可选地,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别之前,所述方法还包括:
利用指定过滤规则,对所得到的所述第一解析内容和所述第二解析内容进行过滤处理;其中,所述指定过滤规则为过滤指定键和对应的键值的过滤规则,所述指定键为在所对应的键值不同时,对程序文件的一致性不存在影响的键。
可选地,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别之后,所述方法还包括:
利用所述第一程序文件和第二程序文件的差异内容,生成所述第一程序文件和所述第二程序文件的差异报告。
第二方面,本发明实施例提供了一种程序文件对比装置,包括:
获取模块,用于获取待进行对比的第一程序文件和第二程序文件;其中,所述第一程序文件和第二程序文件均为目标格式的程序文件;
解析模块,用于按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;其中,各个第一解析内容和各个第二解析内容中的任一解析内容为成对出现的开始标签和结束标签,以及开始标签和结束标签之间的包含有键和键值的代码内容;
识别模块,用于基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,得到所述第一程序文件和第二程序文件的差异内容。
第三方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现任一所述的程序文件对比方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现任一所述的程序文件对比方法。
本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的程序文件对比方法。
本发明实施例有益效果:
本发明实施例提供的程序文件对比方法,能够获取待进行对比的第一程序文件和第二程序文件,并按照目标格式对应的解析方式对第一程序文件和第二程序文件进行解析,得到第一程序文件中的各个第一解析内容以及第二程序文件中的各个第二解析内容,并且可以基于各个第一解析内容和各个第二解析内容识别第一程序文件和第二程序文件的差异内容。可见,本发明提供的程序文件对比方法,不考虑代码内容的顺序,通过各个第一解析内容和各个第二解析内容,即可识别第一程序文件和第二程序文件的差异内容,这样使得若各个第一解析内容和各个第二解析内容中存在相同的代码内容,无论该代码内容在第一程序文件或第二程序文件中的顺序是否相同,均不会识别出该相同的代码内容存在差异。可见,通过本方案可以提升程序文件对比的准确率。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为本发明实施例提供的一种程序文件对比方法的流程示意图;
图2为本发明实施例提供的一种程序文件对比方法的另一流程示意图;
图3(a)为相关技术提供的一种程序文件对比方法的实施例示意图;
图3(b)为本发明实施例提供的一种程序文件对比方法的实施例示意图;
图4为本发明实施例提供的一种程序文件对比装置的示意图;
图5为本发明实施例提供的一种电子设备的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
客户端一般由多个服务器提供服务,若多个服务器中用于提供客户端对应服务的程序文件不一致,则多个服务器中程序文件不一致的服务器会发出报警,需要人工进行修复。若对多个服务器中的、用于给同一客户端提供服务的程序文件进行对比,可以利用对比得到的差异内容,进行程序文件的修复,保证该客户端正常运行。
相关技术中的程序文件对比方法,一般是逐行对比程序文件的代码内容,从而识别两个程序文件对比的差异内容。在不同类型的文件中,有各自语法中定义的代码内容,这些代码内容之间可能存在多余的空格、空行、错行等,代码内容的排列顺序也可能不同,但在语义上代码内容其实是没有区别的。相关技术的程序文件对比方法无法智能识别语义,得到的对比结果总是存在差异。也就是代码内容之间存在的多余的空格、空行、错行等,以及不同排列顺序的代码内容会被识别为差异内容,从而,导致程序文件对比的准确率较低。
并且,若识别出差异内容,服务器会进行报警,需要人工确认该报警的差异内容是否为正常差异,若该差异内容为正常差异,则可以不进行修复,若不为正常差异,需要人工进行程序文件的修复。所谓正常差异为代码内容相同,但不同程序文件中代码内容的顺序不同的差异,或者,不同程序文件中存在错行、多余的空格以及空行等差异,此时,对于需要人工识别差异内容的工作人员而言,无疑增加其工作量。
基于此,本发明提供了一种程序文件对比方法、装置、电子设备及存储介质,以提高程序文件对比的准确率。
下面首先对本发明提供的一种程序文件对比方法进行介绍。
其中,本发明实施例提供的程序文件对比方法可以应用于电子设备,该电子设备可以为服务器或终端设备,示例性的,终端设备可以为:智能手机、平板电脑、台式电脑或笔记本电脑等,本发明并不对电子设备的具体形态进行限定,本发明实施例提供的一种程序文件对比方法可以应用于任一具有程序文件对比需求的场景,例如:对比各个服务器中用于给同一客户端提供服务的程序文件的场景,或者,对比不同版本的程序文件的场景。
具体而言,该程序文件对比方法的执行主体可以为程序文件对比装置。示例性的,当该程序文件对比方法应用于终端设备时,该程序文件对比装置可以为运行于终端设备的功能软件,例如:用于进行程序文件对比的功能软件,该程序文件对比装置也可以为现有客户端的插件,例如:用于运行程序文件的客户端中的插件。示例性的,当该程序文件对比方法应用于服务器时,该程序文件对比装置可以为运行于服务器的、运行程序文件的客户端对应的服务端程序中的功能模块。
本发明实施例提供的一种程序文件对比方法,可以包括如下步骤:
获取待进行对比的第一程序文件和第二程序文件;其中,所述第一程序文件和第二程序文件均为目标格式的程序文件;
按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;其中,各个第一解析内容和各个第二解析内容中的任一解析内容为成对出现的开始标签和结束标签,以及开始标签和结束标签之间的包含有键和键值的代码内容;
基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,得到所述第一程序文件和第二程序文件的差异内容。
本发明实施例提供的程序文件对比方法,能够获取待进行对比的第一程序文件和第二程序文件,并按照目标格式对应的解析方式对第一程序文件和第二程序文件进行解析,得到第一程序文件中的各个第一解析内容以及第二程序文件中的各个第二解析内容,并且可以基于各个第一解析内容和各个第二解析内容识别第一程序文件和第二程序文件的差异内容。可见,本发明提供的程序文件对比方法,不考虑代码内容的顺序,通过各个第一解析内容和各个第二解析内容,即可识别第一程序文件和第二程序文件的差异内容,这样使得若各个第一解析内容和各个第二解析内容中存在相同的代码内容,无论该代码内容在第一程序文件或第二程序文件中的顺序是否相同,均不会识别出该相同的代码内容存在差异。可见,通过本方案可以提升程序文件对比的准确率。
下面结合附图,对本发明实施例提供的一种程序文件对比方法进行详细介绍。
如图1所示,本发明实施例提供的一种程序文件对比方法,可以包括如下步骤:
S101:获取待进行对比的第一程序文件和第二程序文件;
其中,所述第一程序文件和第二程序文件均为目标格式的程序文件;
在对程序文件对比时,首先需要获取待进行对比的第一程序文件和第二程序文件,通过执行后续的步骤对第一程序文件和第二程序文件进行对比,从而得到第一程序文件和第二程序文件的差异内容。
需要说明的是,第一程序文件和第二程序文件可以为存在一定相似性的两程序文件,即第一程序文件和第二程序文件中至少存在部分相同的代码内容。示例性的,第一程序文件和第二程序文件可以为:为同一客户端提供服务的多个服务器中用于提供客户端对应服务的两程序文件,也可以是针对某一客户端的不同版本的程序文件,这都是合理的。另外,第一程序文件和第二程序文件的获取方式也可以有多种,示例性的,可以人为输入或选定任意第一程序文件和第二程序文件,也可以自动从为同一客户端提供服务的多个服务器中获取用于提供客户端对应服务的两程序文件,或者自动获取针对某一客户端不同版本的两程序文件等等。
另外,由于第一程序文件和第二程序文件一般为多个服务器中为同一客户端提供对应服务的程序文件,或者,针对某一客户端不同版本的程序文件,其文件格式可以为相同的目标格式,示例性的,任一程序文件的文件格式包括:第一类格式、第二类格式或第三类格式;其中,所述第一类格式为ini或properties文件格式;所述第二类格式为xml文件格式;所述第三类格式为yaml或json文件格式。其中,ini(Initialization File,初始化文件)格式的文件由节(section)、键和键值组成,键和键值可以为:name=username;properties格式的文件中,每组键和键值都占一行,例如:某一行包括:name=username,另一行包括:name=driver;xml(Extensible Markup Language,可拓展标记语言),是一种用于标记电子文件使其具有结构性的标记语言;yaml是一个可读性高,用来表达数据序列化的格式;json(JavaScriptObject Notation,JS对象简谱),是一种轻量级的数据交换格式。
需要说明的是,上述对第一程序文件和第二程序文件的说明,以及其获取方式的说明,仅仅作为示例,并不应构成对本发明的限定。
S102:按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;
其中,各个第一解析内容和各个第二解析内容中的任一解析内容为包含键和键值的代码内容,且任一解析内容为成对出现的开始标签和结束标签之间的内容;
经发明人研究发现,程序文件中存在差异的内容一般为程序文件中成对出现的开始标签和结束标签之间的内容,例如:图3(a)中<transactionManager type=”JDBC”/>、<transactionManager type=”MYSQL”/>,两程序文件中相同的键“type”对应于不同的键值。另外,两个程序文件的差异也可以是其外围的标签,例如:第一程序文件包含的内容为:第一行:<config-A>,第二行:<transactionManager type=”JDBC”/>,第三行:</config-A>;第二程序文件包含的内容为:第一行:<config-B>,第二行:<transactionManager type=”JDBC”/>,第三行:</config-B>;第一程序文件的外围的标签config-A、/config-A与第二程序文件的外围标签config-B、/config-B不同。因此,可以识别程序文件中,成对出现的开始标签和结束标签之间的包含有键和键值的代码内容,即可通过后续的步骤,得到两程序文件的差异内容。
由于不同文件格式其对应的解析方式不同,因此,可以按照第一程序文件和第二程序文件的目标格式对应的解析方式,对第一程序文件和第二程序文件进行解析,从得到第一程序文件中的各个第一解析内容和第二程序文件中的各个第二解析内容。针对不同文件格式,其解析内容可以不同,针对第一类格式的程序文件,其第一解析内容和第二解析内容可以分别为:name=username,name=driver,相应的,其成对出现的开始标签和结束标签可以分别分为:一组键和键值中属于键的起始部分,以及一组键和键值中属于键值的结束部分,针对第一类格式中属于properties格式的程序文件,其成对出现的开始标签和结束标签也可以是某一行的起始部分和结束部分。针对第二类格式的程序文件,如图3(b)所示,其第一解析内容和第二解析内容可以分别为:<config><enviroments><enviroment><transactionManager type=”JDBC”/></enviroment></enviroments></config>以及<config><enviroments><enviroment><transactionManager type=”MYSQL”/></enviroment></enviroments></config>,其中,第一解析内容和第二解析内容的开始标签和结束标签分别为<config>以及</config>。而第三类格式的程序文件,由于需要先将其格式转换为第二类格式,并按照第二类给的对应的解析方式进行解析,因此,第三类格式的程序文件,其第一解析内容和第二解析内容,以及对应的开始标签和结束标签,可以与第二类格式的程序文件类似。
需要说明的是,由于任一格式的程序文件的代码内容中一般都包含有成对出现的开始标签和结束标签,并且开始标签和结束标签之间的代码内容包含有键和键值,因此,可以按照开始标签和结束标签对代码内容进行解析,从而得到各个包含键和键值的代码内容的解析内容。
示例性的,在一种实现方式中,按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,包括:
若目标格式为第一类格式,根据第一类格式对应的语法识别第一程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第一代码内容,以及第二程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第二代码内容,根据用于表征所述第一类格式的程序文件中的开始标签和结束标签,逐行对所述第一代码内容和所述第二代码内容进行解析,将第一程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第一代码内容解析后的内容作为所述第一程序文件中的各个第一解析内容,将第二程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第二代码内容解析后的内容作为所述第二程序文件中的各个第二解析内容。
由于第一类格式为ini或properties的文件格式,其包含的代码内容较为简单,可以直接根据第一类格式对应的语法识别第一程序文件中开始标签和结束标签之间的包含有键和键值的第一代码内容,以及第二程序文件中开始标签和结束标签之间的包含有键和键值的第二代码内容,并根据第一类格式的程序文件中的开始标签和结束标签,逐行对第一代码内容和第二代码内容进行解析,即可得到第一程序文件中的各个第一解析内容和第二程序文件中的各个第二解析内容,例如:若第一代码内容包括:第一行name=value1,第二行name=value2,可以按照其对应的开始标识和结束标识,逐行对第一代码内容进行解析,得到的各个第一解析内容包括:“name=value1”,“name=value2”。类似的,第二代码内容也可以通过上述方式进行解析,得到各个第二解析内容。其中,针对第一类格式的程序文件而言,用于表征所述第一类格式的程序文件中的一组键和键值的开始标签可以为该组键和键值中的键的起始部分,相应的结束标签可以为该组键和键值中的键值的末尾部分;并且,若某一行代码内容中包含一组键和键值,该行的开始部分可以为该组键和键值的开始标签,该行的末尾部分可以为该组键和键值的结束标签。
需要说明的是,第一类格式的程序文件中的代码内容,由于其格式的原因,多余的空格、空行、错行等会被忽略,也就是,第一类格式的程序文件解析后的各个第一解析内容和各个第二解析内容中不包含多余的空格、空行、错行等。
示例性的,在另一种实现方式中,按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,包括:
若目标格式为第二类格式,利用第二类格式对应的解析工具包,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容。
第二类格式为xml文件格式,在对xml格式的程序文件进行解析时,可以利用xml格式对应的解析工具包,分别对第一程序文件和第二程序文件进行解析。示例性的,第二类格式对应的解析工具包可以为SAXReader工具包。另外,由于第二类格式是按照xml语法进行解析,因此,键和键值之间的空格、空行等,以及每组键和键值之间的空格、空行等,不会出现在第一解析内容或第二解析内容中。针对xml格式的程序文件而言,其成对出现的开始标签和结束标签可以为成对出现的具有层级关系的标签中的最外围的标签,例如:解析第二类格式的程序文件得到的解析内容可以为:<config><enviroments><enviroment><transactionManager type=”JDBC”/></enviroment></enviroments></config>,其中包含有层级关系的多个标签,如:<config>和</config>为最外围的标签,可以作为第二类格式的程序文件中成对出现的开始标签和结束标签,<enviroments>和</enviroment>为内层标签,<transactionManager type=”JDBC”/>为包含键和键值的代码内容。
示例性的,在另一种实现方式中,按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,包括:
若目标格式为第三类格式,将所述第一程序文件和所述第二程序文件的格式转换为第二类格式,利用第二类格式对应的解析工具包,分别对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容。
第三类格式为yaml或json文件格式,由于yaml或json格式可以转换为xml格式,因此可以先将第三类格式的程序文件转换为第二类格式的程序文件,在利用上述第二类格式对应的解析工具包,分别对格式转换后的第一程序文件和第二程序文件进行解析。由于第三类格式的程序文件是先转换为第二类格式的程序文件,并按照xml语法进行解析,因此,键和键值之间的空格、空行等,以及每组键和键值之间的空格、空行等,不会出现在第一解析内容或第二解析内容中。针对格式转换后的程序文件而言,其成对出现的开始标签和结束标签可以为成对出现的具有层级关系的标签中的最外围的标签,例如:解析第二类格式的程序文件得到的解析内容可以为:<config><enviroments><enviroment><transactionManager type=”JDBC”/></enviroment></enviroments></config>,其中包含有层级关系的多个标签,如:<config>和</config>为最外围的标签,可以作为第二类格式的程序文件中成对出现的开始标签和结束标签,<enviroments>和</enviroment>为内层标签,<transactionManager type=”JDBC”/>为包含键和键值的代码内容。
需要说明的是,上述对第一类格式、第二类格式以及第三类格式对应的程序文件解析方式的说明,仅仅作为示例,并不应构成对本发明的限定。
S103:基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,得到所述第一程序文件和第二程序文件的差异内容;
在对程序文件进行解析后,可以根据解析得到的各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,即对各个第一解析内容和各个第二解析内容进行对比,从而得到第一程序文件和第二程序文件的差异内容。
由于第一程序文件和第二程序文件可能存在不同类型的差异内容,因此,可以先识别第一解析内容和第二解析内容是否满足不同类型的差异内容对应的条件或对比结果,从而确定第一程序文件和第二程序文件的差异内容的类型,以及差异内容,从而方便在识别到差异内容后,根据不同类型的差异内容进行程序文件的修复。
示例性的,在一种实现方式中,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,包括:
将指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对;其中,指定解析内容中的各个第一解析内容和第二解析内容包含有相同的、成对出现的开始标签和结束标签;
若基于比对结果确定出任一第一解析内容符合第一指定条件,则将该第一解析内容确定为第一类差异内容;其中,所述第一类差异内容为相对于第一程序文件而言,在第二程序文件中删除的内容;所述第一指定条件为与每一第二解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第二解析内容符合第二指定条件,则将该第二解析内容确定为第二类差异内容;其中,所述第二类差异内容为相对于第一程序文件而言,在第二程序文件中增加的内容;所述第二指定条件为与每一第一解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第一解析内容和任一第二解析内容的对比结果为指定结果,则将该第一解析内容和该第二解析内容确定为第三类差异内容;其中,所述第三类差异内容为相对于第一程序文件而言,在第二程序文件中修改的内容,所述指定结果为存在的键均相同且所存在的均相同的键对应的至少一个键值不同,或者,存在相同的键且存在不同的键;
并且,将解析得到的各个第一解析内容中的、除所述指定解析内容所包含的第一解析内容以外的其他第一解析内容,确定为第一类差异内容;将解析得到的各个第二解析内容中的、除所述指定解析内容所包含的第二解析内容以外的其他第二解析内容,确定为第二类差异内容。
由于各个第一解析内容和第二解析内容为按照成对出现的开始标签和结束标签解析得到的,在利用各个第一解析内容和第二解析内容进行第一程序文件和第二程序文件的差异内容识别时,可以以成对出现的开始标签和结束标签为标准,将具有相同的成对出现的开始标签和结束标签的第一解析内容和第二解析内容进行对比,即可得到第一程序文件和第二程序文件的差异内容。
若任一第一解析内容与每一第二解析内容均不存在相同的键和键值,即证明该第一解析内容存在于第一程序文件,但不存在于第二程序文件中,针对第一程序文件而言,该第一解析内容为在第二程序文件中删除的内容。若任一第二解析内容与每一第一解析内容均不存在相同的键和键值,即证明该第二解析内容存在于第二程序文件,但不存在于第一程序文件中,针对第一程序文件而言,该第二解析内容为在第二程序文件中增加的内容。若任一第一解析内容和任一第二解析内容的对比结果为存在的键均相同且所存在的均相同的键对应的至少一个键值不同,或者,存在相同的键且存在不同的键;由于程序文件存在的键也可以具有层级关系,例如:<property name="driver"value="SQLServerDriver"/>的name为主键,value可以为辅键,该层级关系中可以只存在一个键,或者存在多个键,本发明并不对一层级中键的数量进行限定。针对包含有任一数量的键的任一第一解析内容和任一第二解析内容,若其对比结果为存在的键均相同且所存在的均相同的键对应的至少一个键值不同,说明其中至少存在一个键对应的键值发生了修改;针对包含有多个键的任一第一解析内容和任一第二解析内容,若其对比结果为存在相同的键且存在不同的键,此时说明多个键中存在相同的键,也存在增加或删除的键,例如:第一解析内容为:<propertyname="driver"value="SQLServerDriver"/>,第二解析内容为:<property name="driver"/>,其中存在的name键相同,但第二解析内容中不存在value键,针对该种差异内容,无论相同的键对应的键值是否相同,均可以认为该差异内容属于第一程序文件和第二程序文件中发生修改的内容。
另外,需要说明的是,所谓键,可以为任一解析内容中的各个层级的标签,以及其包含的最内层标签中的键的组合,例如,一解析内容为:<config><enviroments><enviroment><transactionManager type=”JDBC”/></enviroment></enviroments></config>,最内层标签中的键为type,而各个外围标签为<config><enviroments><enviroment>以及</enviroment></enviroments></config>;其中,最外围成对出现的标签<config>和</config>可以作为该解析内容的开始标签和结束标签,而type以及各个外围标签的组合,可以作为一个type键,其对应的键值为JDBC。也就是,指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对时,需要其包含的各个层级的标签均相同,以及最内层的键和键值相同,才不会识别出该键存在差异。
示例性的,若第一解析内容包含的键有A、B和C,分别对应有键值a、b和c,第二解析内容包含的键有B、C和D,分别对应有键值b’、c’和d。针对A而言,A与第二解析内容中的各个键均不存在相同的键,则A及其对应的键值a为针对第一程序文件而言,在第二程序文件中删除的内容;针对B和C而言,在第一解析内容中和第二解析内容分别对应有不同的键值,b和c,以及b’和c’,则针对B和C在第一程序文件对应的键值b和c而言,B和C在第二程序文件中对应的键值b’和c’为其在第二程序文件中修改的内容;针对D而言,D与第一解析内容中的各个键均不存在相同的键,则D及其对应的键值d为针对第一程序文件而言,在第二程序文件中增加的内容。
并且,解析得到的各个第一解析内容中的、除所述指定解析内容所包含的第一解析内容以外的其他第一解析内容,由于各个第二解析内容中不存在与其开始标签和结束标签相同的解析内容,该其他第一解析内容可以直接作为第一类差异内容;解析得到的各个第二解析内容中的、除所述指定解析内容所包含的第二解析内容以外的其他第二解析内容,由于各个第一解析内容中不存在与其开始标签和结束标签相同的解析内容,该其他第二解析内容可以直接作为第二类差异内容。
需要说明的是,第一程序文件和第二程序文件的差异内容可以至少包含有第一类差异内容、第二类差异内容或第三类差异内容中的至少一种,在此并不对第一程序文件和第二程序文件的差异内容的类型进行限定。
本发明实施例提供的程序文件对比方法,能够获取待进行对比的第一程序文件和第二程序文件,并按照目标格式对应的解析方式对第一程序文件和第二程序文件进行解析,得到第一程序文件中的各个第一解析内容以及第二程序文件中的各个第二解析内容,并且可以基于各个第一解析内容和各个第二解析内容识别第一程序文件和第二程序文件的差异内容。可见,本发明提供的程序文件对比方法,不考虑代码内容的顺序,通过各个第一解析内容和各个第二解析内容,即可识别第一程序文件和第二程序文件的差异内容,这样使得若各个第一解析内容和各个第二解析内容中存在相同的代码内容,无论该代码内容在第一程序文件或第二程序文件中的顺序是否相同,均不会识别出该相同的代码内容存在差异。可见,通过本方案可以提升程序文件对比的准确率。
可选地,在另一种实现方式中,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别之前,所述方法还包括:
利用指定过滤规则,对所得到的所述第一解析内容和所述第二解析内容进行过滤处理;其中,所述指定过滤规则为过滤指定键和对应的键值的过滤规则,所述指定键为在所对应的键值不同时,对程序文件的一致性不存在影响的键。
由于各个第一解析内容和各个第二解析内容中可能包含有在所对应的键值不同时,对程序文件的一致性不存在影响的键,若不对该键和对应的键值进行过滤,会将该键对应的不同的键值识别为第一程序文件和第二程序文件的差异内容,例如:针对两个服务器中为同一客户端提供服务的程序文件而言,该程序文件中可能对应有该服务器的IP地址的指定键和键值“IP=192.168.1.1”和“IP=192.168.2.2”。而指定键对应不同键值时,不会对程序文件一致性存在影响,但若两程序文件中存在该指定键和对应的不同的键值,会将不同的键值识别为差异内容。因此,可以先利用指定过滤规则,对所得到的各个第一解析内容和各个第二解析内容进行过滤处理,从而过滤掉在所对应的键值不同时,对程序文件的一致性不存在影响的键,以及该键和对应的键值。
通过对所得到的所述第一解析内容和所述第二解析内容进行过滤处理,可以过滤掉所对应的键值不同时,对程序文件的一致性不存在影响的键,以及其对应的键值,从而避免在该键在不同程序文件中对应的键值不同时,将该不同的键值识别为不同程序文件的差异内容,从而提高了程序文件对比的准确率。
可选地,在另一实现方式中,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别之后,所述方法还包括:
利用所述第一程序文件和第二程序文件的差异内容,生成所述第一程序文件和所述第二程序文件的差异报告。
在得到第一程序文件和第二程序文件的差异内容后,还可以利用所得到的差异内容,生成第一程序文件和第二程序文件的差异报告,差异报告可以详细体现出第一程序文件和第二程序文件的差异,可以包含有差异的类型,例如:删除、增加或修改等差异内容。
通过生成第一程序文件和第二程序文件的差异报告,可以详细体现出第一程序文件和第二程序文件的差异类型,方便比较和查看,更简洁的看到所对比的程序文件的差异。
为了方便理解,下面结合一具体实施例,对本发明实施例提供的一种程序文件对比方向进行详细介绍。如图2所示,本发明实施例提供的另一种程序文件对比方法,可以包括如下步骤:
S201:指定对比的文件和过滤规则;即用户指定需要对比的程序文件和后续的数据过滤规则,对应上述的获取待进行对比的第一程序文件和第二程序文件,以及上述指定过滤规则的确定方式。
S202:确定所对比的文件的格式;即确定所对比的程序文件的格式,对应上述第一程序文件和第二程序文件的目标格式。
S203:ini格式;即所对比的文件的格式为ini格式,对应上述的目标格式为第一类格式,并触发执行S208。
S204:properties格式;即所对比的文件的格式为preperties格式,对应上述目标格式为第一类格式,并触发执行S209。
S205:xml格式;即所对比的文件格式为xml格式,对应上述目标格式为第二类格式,并触发执行S210。
S206:json格式;即所对比的文件格式为json格式,对应上述目标格式为第三类格式,并触发执行S211。
S207:yaml格式;即所对比的文件格式为yaml格式,对应上述目标格式为第三类格式,并触发执行S213。
S208:逐行解析;即对ini格式的所对比的程序文件逐行进行解析,根据语法识别代码内容,并将代码内容解析为键和键值,并保存解析后的键和键值;对应上述根据第一类格式对应的语法识别第一程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第一代码内容,以及第二程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第二代码内容,根据用于表征所述第一类格式的程序文件中的开始标签和结束标签,逐行对所述第一代码内容和所述第二代码内容进行解析;并触发执行S215。
S209:逐行解析;即对properties格式的所对比的程序文件逐行进行解析,根据语法识别代码内容,并将代码内容解析为键和键值,并保存解析后的键和键值;对应上述根据第一类格式对应的语法识别第一程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第一代码内容,以及第二程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第二代码内容,根据用于表征所述第一类格式的程序文件中的开始标签和结束标签,逐行对所述第一代码内容和所述第二代码内容进行解析;并触发执行S215。
S210:SAXReader解析;即利用SAXReader工具包对xml格式的所对比的程序文件逐行进行解析,由于是按照xml语法进行解析,因此,解析内容中不会存在多余的空格、空行、错行,最后将解析后的键和对应的键值保存;对应上述利用第二类格式对应的解析工具包,分别对所述第一程序文件和第二程序文件进行解析;并触发执行S215。
S211:转换为element元素;即将jsom格式的所对比的程序文件转换为element元素,其中,element元素为xml文档中的元素,可包含属性、其他元素或文本等内容。对应于上述将所述第一程序文件和所述第二程序文件的格式转换为第二类格式;并触发执行S212。
S212:SAXReader解析;即对jsom格式的所对比的程序文件转换后的element元素,利用SAXReader工具包进行解析,由于是按照xml语法进行解析,因此,解析内容中不会存在多余的空格、空行、错行,最后将解析后的键和对应的键值保存;对应于上述利用第二类格式对应的解析工具包,分别对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析;并触发执行S215。
S213:转换为element元素;即将yaml格式的所对比的程序文件转换为element元素,对应于上述将所述第一程序文件和所述第二程序文件的格式转换为第二类格式;并触发执行S214。
S214:SAXReader解析;即对yaml格式的所对比的程序文件转换后的element元素,利用SAXReader工具包进行解析,由于是按照xml语法进行解析,因此,解析内容中不会存在多余的空格、空行、错行,最后将解析后的键和对应的键值保存;对应于上述利用第二类格式对应的解析工具包,分别对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析;并触发执行S215。
S215:过滤规则筛选数据;即利用S201所指定的过滤规则,对任一种格式的所对比的程序文件解析后的数据进行筛选,对应与上述的,利用指定过滤规则,对所得到的所述第一解析内容和所述第二解析内容进行过滤处理。
S216:逐字段对比数据;即对过滤后的数据按照逐个字段进行数据对比,对应于上述的基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别。
S217:是否存在相同的字段;即识别两个文件的对比结果中是否存在相同的字段,若是,将相同的字段作为上述的指定解析内容,并执行S219,若否,执行S218。
S218:将差异内容缓存;即所对比的程序文件的对比结果为不存在相同的字段,则程序文件中不同的字段及其对应的内容均作为差异内容进行缓存。对应于上述的将解析得到的各个第一解析内容中的、除所述指定解析内容所包含的第一解析内容以外的其他第一解析内容,确定为第一类差异内容;将解析得到的各个第二解析内容中的、除所述指定解析内容所包含的第二解析内容以外的其他第二解析内容,确定为第二类差异内容;可以将所确定的差异内容缓存。
S219:内容是否一致;即对比程序文件中相同的字段对应的内容是否一致,对应上述将指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对;若是,执行S221,若否,执行S220。
S220:将差异内容缓存;即程序文件中相同的字段对应的内容不一致,将不一致的内容作为差异内容进行缓存。对应与上述的指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对,得到的第一类差异内容、第二类差异内容和/或第三类差异内容;可以将所确定的差异内容缓存。
S221:所有字段完成对比;即识别是否所有字段完成对比,若是执行S222,若否,重复执行S216。
S222:将差异汇总导出为excel文件;即将所缓存的差异内容汇总,并导出为excel文件,对应上述的利用所述第一程序文件和第二程序文件的差异内容,生成所述第一程序文件和所述第二程序文件的差异报告;其中,差异报告的格式可以为excel文件格式,也可以为其他格式。
本方案提供的程序文件对比方法,允许用户自定义文件对比的过滤规则,能够智能识别ini、yml、json、xml、properties五种类型的程序文件,能够对语法中键和键值间的空格、空行、错行,每组键和键值间的空格、空行、错行,以及代码内容中每组键和键值的排列顺序不一致进行智能识别,排除语法上的干扰,专注对语义中的代码内容进行对比。通过不同文件格式的语法以及其对应的解析方式,对程序文件进行解析,得到的解析内容中键和键值间不包含空格、空行、错行,每组键和键值间也不包含空格、空行、错行。并且,通过对解析的内容按照字段逐个进行对比,排除了语法上的干扰,避免了代码内容顺序不一致导致程序文件对比准确率低的问题,从而,提升程序文件对比的准确率。
为了更清楚理解方案,针对xml格式的程序文件,结合图3(a)所示的现有方案的对比方式和图3(b)所示的本方案提供的程序文件的对比方式进行对比说明:
如图3(a)所示,现有方案中,针对IP地址分别为192.168.0.93和192.168.0.109的两个服务器,其为同一客户端提供服务的程序文件可以分别为第一程序文件和第二程序文件,按照现有方案进行程序文件对比,所识别出的差异内容包括:第一程序文件和第二程序文件中,第6行type键分别对应有不同的键值”JDBC”和”MYSQL”;第一程序文件的第8行中name键与value键之间存在多余的空格;第一程序文件中存在错行或多余的空行:第11行以及第13行;第一程序文件中的第8、9行的代码内容,与第二程序文件中第8、9行的代码内容顺序不同;第二程序文件中第11行新增<prorerty name=”passwoed”value=””/>。可见,现有的方案,程序文件的代码内容中存在错行、空格等,且各个键的顺序不一致,会将多余的空格、空行、错行等,以及代码内容相同但代码顺序不同的代码内容,识别为两程序文件的差异内容,不方便比较和查看。
如图3(b),所示,按照本方案进行程序文件对比,所识别出的差异内容包括:第一程序文件中,第11行type键对应的键值”JDBC”,与第二程序文件中,第12行type键对应的键值”MYSQL”不同;相对于第一程序文件而言,第二程序文件中第7行新增<prorerty name=”passwoed”value=””/>。另外,图3(b)中存在多个键和键值对组合的复合键值对,如:<property name="driver"value="SQLServerDriver"/>,对应上述具有层级关系的键;针对复合键值对进行对比时,需要先确定该复合键值对的外围标签<config><enviroments><enviroment></enviroment></enviroments></config>是否为均相同,若均相同,然后依次对比复合键值对包含的键和键值是否均相同,若均相同,则不会识别该复合键值对存在差异。
可见,通过本方案,可以消除图3(a)中所示的多余的空格以及错行或多余的空行,并且,可以根据键重新对代码内容进行排序,第一程序文件和第二程序文件的各个键的顺序一致,且不存在多余的空格、换行等,方便比较和查看。
通过图3(a)和图3(b)对比的方式,可见通过本方案的程序文件对比的方式,在排序对比后,差异内容的显示较为集中,对于换行、错行、空格等非内容不一致导致的差异可以智能消除,更加方面简洁的查看程序文件的差异。并且,本方案只需对比两程序文件中是否存在相同的代码内容,排除了将不同顺序的、相同的代码内容识别为差异内容的问题,减少了不必要的差异内容的识别,从而提升程序文件对比的准确率。
下面结合表1对本发明提供的程序文件对比的差异报告进行详细介绍。
如表1所示,上述IP地址分别为192.168.0.93和192.168.0.109的两个服务器,其为同一客户端提供服务的程序文件对比形成的差异报告可以包括:所对比的代码的序号,所对比的代码内容,差异的类型,差异详情等。另外,差异报告的文件格式可以为excel格式,也可以是其他的文件格式。所生成的差异报告中,可以详细列出所对比的两程序文件的差异,差异的类型可以为:多余、删除、不一致等(对应上述增加、删除、修改的差异内容)。
表1
基于上述程序文件对比方法,本发明实施例还提供了一种程序文件对比装置,如图4所示,包括:
获取模块410,用于获取待进行对比的第一程序文件和第二程序文件;其中,所述第一程序文件和第二程序文件均为目标格式的程序文件;
解析模块420,用于按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;其中,各个第一解析内容和各个第二解析内容中的任一解析内容为成对出现的开始标签和结束标签,以及开始标签和结束标签之间的包含有键和键值的代码内容;
识别模块430,用于基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别,得到所述第一程序文件和第二程序文件的差异内容。
本发明实施例提供的程序文件对比方法,能够获取待进行对比的第一程序文件和第二程序文件,并按照目标格式对应的解析方式对第一程序文件和第二程序文件进行解析,得到第一程序文件中的各个第一解析内容以及第二程序文件中的各个第二解析内容,并且可以基于各个第一解析内容和各个第二解析内容识别第一程序文件和第二程序文件的差异内容。可见,本发明提供的程序文件对比方法,不考虑代码内容的顺序,通过各个第一解析内容和各个第二解析内容,即可识别第一程序文件和第二程序文件的差异内容,这样使得若各个第一解析内容和各个第二解析内容中存在相同的代码内容,无论该代码内容在第一程序文件或第二程序文件中的顺序是否相同,均不会识别出该相同的代码内容存在差异。可见,通过本方案可以提升程序文件对比的准确率。
可选地,所述识别模块具体用于:
将指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对;其中,指定解析内容中的解析内容包含有相同的、成对出现的开始标签和结束标签;
若基于比对结果确定出任一第一解析内容符合第一指定条件,则将该第一解析内容确定为第一类差异内容;其中,所述第一类差异内容为相对于第一程序文件而言,在第二程序文件中删除的内容;所述第一指定条件为与每一第二解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第二解析内容符合第二指定条件,则将该第二解析内容确定为第二类差异内容;其中,所述第二类差异内容为相对于第一程序文件而言,在第二程序文件中增加的内容;所述第二指定条件为与每一第一解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第一解析内容和任一第二解析内容的对比结果为指定结果,则将该第一解析内容和该第二解析内容确定为第三类差异内容;其中,所述第三类差异内容为相对于第一程序文件而言,在第二程序文件中修改的内容,所述指定结果为存在的键均相同且所存在的均相同的键对应的至少一个键值不同,或者,存在相同的键且存在不同的键;
并且,将解析得到的各个第一解析内容中的、除所述指定解析内容所包含的第一解析内容以外的其他第一解析内容,确定为第一类差异内容;将解析得到的各个第二解析内容中的、除所述指定解析内容所包含的第二解析内容以外的其他第二解析内容,确定为第二类差异内容。
可选地,任一程序文件的文件格式包括:第一类格式、第二类格式或第三类格式;其中,所述第一类格式为ini或properties文件格式;所述第二类格式为xml文件格式;所述第三类格式为yaml或json文件格式。
可选地,所述解析模块具体用于:
若目标格式为第一类格式,根据第一类格式对应的语法识别第一程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第一代码内容,以及第二程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第二代码内容,根据用于表征所述第一类格式的程序文件中的开始标签和结束标签,逐行对所述第一代码内容和所述第二代码内容进行解析,将第一程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第一代码内容解析后的内容作为所述第一程序文件中的各个第一解析内容,将第二程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第二代码内容解析后的内容作为所述第二程序文件中的各个第二解析内容;
若目标格式为第二类格式,利用第二类格式对应的解析工具包,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容;
若目标格式为第三类格式,将所述第一程序文件和所述第二程序文件的格式转换为第二类格式,利用第二类格式对应的解析工具包,分别对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容。
可选地,所述装置还包括:
过滤模块,用于利用指定过滤规则,对所得到的所述第一解析内容和所述第二解析内容进行过滤处理;其中,所述指定过滤规则为过滤指定键和对应的键值的过滤规则,所述指定键为在所对应的键值不同时,对程序文件的一致性不存在影响的键。
可选地,所述装置还包括:
生成模块,用于利用所述第一程序文件和第二程序文件的差异内容,生成所述第一程序文件和所述第二程序文件的差异报告。
本发明实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,
存储器503,用于存放计算机程序;
处理器501,用于执行存储器503上所存放的程序时,实现任一种程序文件对比方法。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种格式的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一程序文件对比方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一程序文件对比方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (7)

1.一种程序文件对比方法,其特征在于,所述方法包括:
获取待进行对比的第一程序文件和第二程序文件;其中,所述第一程序文件和第二程序文件均为目标格式的程序文件;任一程序文件的文件格式包括:第一类格式、第二类格式或第三类格式;其中,所述第一类格式为ini或properties文件格式;所述第二类格式为xml文件格式;所述第三类格式为yaml或json文件格式;
按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;其中,各个第一解析内容和各个第二解析内容中的任一解析内容为成对出现的开始标签和结束标签,以及开始标签和结束标签之间的包含有键和键值的代码内容;所述目标格式为第三类格式时,所述目标格式对应的解析方式为将所述第一程序文件和所述第二程序文件的格式转换为第二类格式后,基于第二类格式对应的解析工具包对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析的方式;
将指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对;其中,指定解析内容中的解析内容包含有相同的、成对出现的开始标签和结束标签;
若基于比对结果确定出任一第一解析内容符合第一指定条件,则将该第一解析内容确定为第一类差异内容;其中,所述第一类差异内容为相对于第一程序文件而言,在第二程序文件中删除的内容;所述第一指定条件为与每一第二解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第二解析内容符合第二指定条件,则将该第二解析内容确定为第二类差异内容;其中,所述第二类差异内容为相对于第一程序文件而言,在第二程序文件中增加的内容;所述第二指定条件为与每一第一解析内容均不存在相同的键和键值;
若基于比对结果确定出任一第一解析内容和任一第二解析内容的对比结果为指定结果,则将该第一解析内容和该第二解析内容确定为第三类差异内容;其中,所述第三类差异内容为相对于第一程序文件而言,在第二程序文件中修改的内容,所述指定结果为存在的键均相同且所存在的均相同的键对应的至少一个键值不同,或者,存在相同的键且存在不同的键;
并且,将解析得到的各个第一解析内容中的、除所述指定解析内容所包含的第一解析内容以外的其他第一解析内容,确定为第一类差异内容;将解析得到的各个第二解析内容中的、除所述指定解析内容所包含的第二解析内容以外的其他第二解析内容,确定为第二类差异内容。
2.根据权利要求1所述的方法,其特征在于,所述按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容,包括:
若目标格式为第一类格式,根据第一类格式对应的语法识别第一程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第一代码内容,以及第二程序文件中各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的第二代码内容,根据用于表征所述第一类格式的程序文件中的开始标签和结束标签,逐行对所述第一代码内容和所述第二代码内容进行解析,将第一程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第一代码内容解析后的内容作为所述第一程序文件中的各个第一解析内容,将第二程序文件中各个成对出现的开始标签和结束标签,以及对各个成对出现的开始标签和结束标签之间的第二代码内容解析后的内容作为所述第二程序文件中的各个第二解析内容;
若目标格式为第二类格式,利用第二类格式对应的解析工具包,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容;
若目标格式为第三类格式,将所述第一程序文件和所述第二程序文件的格式转换为第二类格式,利用第二类格式对应的解析工具包,分别对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析,得到所述第一程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第一解析内容,以及所述第二程序文件中的各个成对出现的开始标签和结束标签,以及各个开始标签和结束标签之间的代码内容,作为各个第二解析内容。
3.根据权利要求1或2所述的方法,其特征在于,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别之前,所述方法还包括:
利用指定过滤规则,对所得到的所述第一解析内容和所述第二解析内容进行过滤处理;其中,所述指定过滤规则为过滤指定键和对应的键值的过滤规则,所述指定键为在所对应的键值不同时,对程序文件的一致性不存在影响的键。
4.根据权利要求1或2所述的方法,其特征在于,所述基于各个第一解析内容和各个第二解析内容,对第一程序文件和第二程序文件进行差异内容识别之后,所述方法还包括:
利用所述第一程序文件和第二程序文件的差异内容,生成所述第一程序文件和所述第二程序文件的差异报告。
5.一种程序文件对比装置,其特征在于,所述装置包括:
获取模块,用于获取待进行对比的第一程序文件和第二程序文件;其中,所述第一程序文件和第二程序文件均为目标格式的程序文件;任一程序文件的文件格式包括:第一类格式、第二类格式或第三类格式;其中,所述第一类格式为ini或properties文件格式;所述第二类格式为xml文件格式;所述第三类格式为yaml或json文件格式;
解析模块,用于按照所述目标格式对应的解析方式,分别对所述第一程序文件和第二程序文件进行解析,得到所述第一程序文件中的各个第一解析内容以及所述第二程序文件中的各个第二解析内容;其中,各个第一解析内容和各个第二解析内容中的任一解析内容为成对出现的开始标签和结束标签,以及开始标签和结束标签之间的包含有键和键值的代码内容;所述目标格式为第三类格式时,所述目标格式对应的解析方式为将所述第一程序文件和所述第二程序文件的格式转换为第二类格式后,基于第二类格式对应的解析工具包对格式转换后的第一程序文件和格式转换后的第二程序文件进行解析的方式;
确定模块,用于将指定解析内容中的各个第一解析内容分别与所述指定解析内容中的各个第二解析内容进行比对;其中,指定解析内容中的解析内容包含有相同的、成对出现的开始标签和结束标签;若基于比对结果确定出任一第一解析内容符合第一指定条件,则将该第一解析内容确定为第一类差异内容;其中,所述第一类差异内容为相对于第一程序文件而言,在第二程序文件中删除的内容;所述第一指定条件为与每一第二解析内容均不存在相同的键和键值;若基于比对结果确定出任一第二解析内容符合第二指定条件,则将该第二解析内容确定为第二类差异内容;其中,所述第二类差异内容为相对于第一程序文件而言,在第二程序文件中增加的内容;所述第二指定条件为与每一第一解析内容均不存在相同的键和键值;若基于比对结果确定出任一第一解析内容和任一第二解析内容的对比结果为指定结果,则将该第一解析内容和该第二解析内容确定为第三类差异内容;其中,所述第三类差异内容为相对于第一程序文件而言,在第二程序文件中修改的内容,所述指定结果为存在的键均相同且所存在的均相同的键对应的至少一个键值不同,或者,存在相同的键且存在不同的键;并且,将解析得到的各个第一解析内容中的、除所述指定解析内容所包含的第一解析内容以外的其他第一解析内容,确定为第一类差异内容;将解析得到的各个第二解析内容中的、除所述指定解析内容所包含的第二解析内容以外的其他第二解析内容,确定为第二类差异内容。
6.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-4任一所述的程序文件对比方法。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-4任一所述的程序文件对比方法。
CN202210925288.8A 2022-08-03 2022-08-03 一种程序文件对比方法、装置、电子设备及存储介质 Active CN115357286B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210925288.8A CN115357286B (zh) 2022-08-03 2022-08-03 一种程序文件对比方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210925288.8A CN115357286B (zh) 2022-08-03 2022-08-03 一种程序文件对比方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN115357286A CN115357286A (zh) 2022-11-18
CN115357286B true CN115357286B (zh) 2023-11-10

Family

ID=84001610

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210925288.8A Active CN115357286B (zh) 2022-08-03 2022-08-03 一种程序文件对比方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115357286B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302078B (zh) * 2023-05-19 2023-08-01 深圳前海环融联易信息科技服务有限公司 代码文件合并方法及装置、存储介质、计算机设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101916255A (zh) * 2010-07-02 2010-12-15 互动在线(北京)科技有限公司 Html内容对比装置及方法
CN106547573A (zh) * 2016-12-06 2017-03-29 恒生电子股份有限公司 一种程序文件对比方法及装置
CN107203468A (zh) * 2017-04-19 2017-09-26 哈尔滨工程大学 一种基于ast的软件版本演化对比分析方法
CN108804131A (zh) * 2018-04-25 2018-11-13 天津卓易云科技有限公司 一种两配置文件的对比算法
CN112181479A (zh) * 2020-09-23 2021-01-05 中国建设银行股份有限公司 代码文件版本间差异的确定方法、装置及电子设备
CN113190220A (zh) * 2021-06-30 2021-07-30 南京冰鉴信息科技有限公司 Json文件差异化对比方法及装置
CN113536762A (zh) * 2021-07-15 2021-10-22 中国工商银行股份有限公司 Json文本的比对方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8533668B2 (en) * 2010-04-26 2013-09-10 Red Hat, Inc. Comparing source code using code statement structures

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101916255A (zh) * 2010-07-02 2010-12-15 互动在线(北京)科技有限公司 Html内容对比装置及方法
CN106547573A (zh) * 2016-12-06 2017-03-29 恒生电子股份有限公司 一种程序文件对比方法及装置
CN107203468A (zh) * 2017-04-19 2017-09-26 哈尔滨工程大学 一种基于ast的软件版本演化对比分析方法
CN108804131A (zh) * 2018-04-25 2018-11-13 天津卓易云科技有限公司 一种两配置文件的对比算法
CN112181479A (zh) * 2020-09-23 2021-01-05 中国建设银行股份有限公司 代码文件版本间差异的确定方法、装置及电子设备
CN113190220A (zh) * 2021-06-30 2021-07-30 南京冰鉴信息科技有限公司 Json文件差异化对比方法及装置
CN113536762A (zh) * 2021-07-15 2021-10-22 中国工商银行股份有限公司 Json文本的比对方法及装置

Also Published As

Publication number Publication date
CN115357286A (zh) 2022-11-18

Similar Documents

Publication Publication Date Title
KR101755365B1 (ko) 레코드 포맷 정보의 관리
US8615526B2 (en) Markup language based query and file generation
EP2527991B1 (en) Analysis method, analysis device, and analysis program
AU2013329525C1 (en) System and method for recursively traversing the internet and other sources to identify, gather, curate, adjudicate, and qualify business identity and related data
US20130275446A1 (en) Creating data in a data store using a dynamic ontology
CN111061833A (zh) 数据处理方法、装置、电子设备和计算机可读存储介质
US10489493B2 (en) Metadata reuse for validation against decentralized schemas
CN109189395B (zh) 一种数据解析方法及装置
CN114091426A (zh) 一种处理数据仓库中字段数据的方法和装置
CN115357286B (zh) 一种程序文件对比方法、装置、电子设备及存储介质
US9390073B2 (en) Electronic file comparator
CN112181924A (zh) 文件转换方法、装置、设备及介质
CN110704432A (zh) 数据索引的建立方法和装置、可读存储介质、电子设备
CN112434115B (zh) 一种数据处理方法、装置、电子设备及可读存储介质
CN112965943A (zh) 一种数据处理方法、装置、电子设备以及存储介质
CN111078773B (zh) 一种数据处理方法及装置
US20140337069A1 (en) Deriving business transactions from web logs
Le Zou et al. On synchronizing with web service evolution
CN111930607B (zh) 一种组合Web服务变更测试用例生成方法及系统
CN117390023A (zh) 数据合计方法、数据合计装置、设备及存储介质
CN113110873A (zh) 统一系统编码规范的方法和装置
CN115391394A (zh) 统一监管报送平台数据检验方法
CN114791879A (zh) 关键字筛查方法及数据处理方法
CN116795866A (zh) 文件处理方法、装置、设备及存储介质
CN117762984A (zh) 数据获取方法、装置、电子设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant