CN112416365A - 文件转换方法、装置及存储介质 - Google Patents

文件转换方法、装置及存储介质 Download PDF

Info

Publication number
CN112416365A
CN112416365A CN202011297297.4A CN202011297297A CN112416365A CN 112416365 A CN112416365 A CN 112416365A CN 202011297297 A CN202011297297 A CN 202011297297A CN 112416365 A CN112416365 A CN 112416365A
Authority
CN
China
Prior art keywords
converted
file
content
pointer
assignment
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.)
Pending
Application number
CN202011297297.4A
Other languages
English (en)
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 Citic Bank Corp Ltd
Original Assignee
China Citic Bank Corp 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 Citic Bank Corp Ltd filed Critical China Citic Bank Corp Ltd
Priority to CN202011297297.4A priority Critical patent/CN112416365A/zh
Publication of CN112416365A publication Critical patent/CN112416365A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing

Abstract

本申请公开了一种文件转换方法、装置及存储介质。该方法包括:获取待转换文件,其中,所述待转换文件包括程序文件,提取所述待转化文件中的至少部分待转换内容,识别所述待转换内容对应的种类,基于所述待转换内容对应的种类,按照与所述种类对应的转换规则将所述待转换内容转换为目标文件内容。本申请提供的实施例解决了相关技术中文件可以自动从之前的系统迁移到分布式核心系统的问题。

Description

文件转换方法、装置及存储介质
技术领域
本申请涉及文件迁移技术领域,具体而言,涉及一种文件转换方法、装置及存储介质。
背景技术
现阶段,国内大中型银行核心系统基本都运行在IBM公司的Z系列大型机和AS/400系列小型机上,其技术相对较封闭。从市场上看IBMAS/400已经处于非主流地位,产品自身的技术发展和支持都存在不可预见性风险,导致系统在未来几年内的性能和稳定性风险系数加大。另一方面,该产品技术架构缺乏水平可扩展能力,难以满足互联网经济时代银行IT系统的高容量和资源动态分配的要求。
随着国产服务器和自主开发的分布式核心系统的逐步发展,一些文件必须要做从之前的系统迁移到分布式核心系统,这个问题是实现技术迁移过程中亟待解决的问题。
发明内容
本申请提供一种文件转换方法、装置及非易失性存储介质,以解决相关技术中,文件可以自动从之前的系统迁移到分布式核心系统的问题。
根据本申请的一个方面,提供了一种文件转换方法,该方法包括:
获取待转换文件,其中,待转换文件包括程序文件;
提取待转化文件中的至少部分待转换内容;
识别待转换内容对应的种类;
基于待转换内容对应的种类,按照与种类对应的转换规则将待转换内容转换为目标文件内容。
在一些实施例中,提取待转化文件中的至少部分待转换内容包括:
扫描待转换文件;
获取待转换文件中所有的指针变量。
在一些实施例中,获取待转换文件中所有的指针变量包括:
在待转换文件中定位到变量定义区域;
在变量定义区域扫描包含字符“*”所在行对应的变量。
在一些实施例中,识别待转换内容对应的种类包括第一类型、第二类型和第三类型;
其中,
第一类型用于指示指针赋值语句均为复杂类型且类型不同;
第二类型用于指示指针赋值语句类型相同;
第三类型用于指示指针赋值语句为简单类型且类型不同。
在一些实施例中,识别待转换内容对应的种类为第一类型;基于待转换内容对应的种
类,按照与种类对应的转换规则进行内容转换包括:
获取指针结构以及对应文件结构;
分析指针结构和对应文件结构之间的字段的对应关系;
对待转换内容中指针赋值语句调用第一预设封装方法进行赋值,第一预设封装方法封装有对指针结构和对应文件结构之间的变量进行的赋值。
在一些实施例中,识别待转换内容对应的种类为第二类型;基于待转换内容对应的种
类,按照与种类对应的转换规则进行内容转换包括:
将待转换文件中赋值语句的第一变量转换为目标文件对应的第二变量;
将待转换文件中赋值语句的第一赋值方式转换为第二赋值方式进行赋值,第二赋值方式包括引用赋值方式。
在一些实施例中,识别待转换内容对应的种类为第三类型;基于待转换内容对应的种
类,按照与种类对应的转换规则进行内容转换包括:
获取指针结构以及对应结构体结构;
基于所结构体结构中的数组获取变量长度;
对待转换内容中指针赋值语句调用第二预设封装方法进行赋值,第二预设封装方法封装有对指针结构和结构体结构之间的变量进行的赋值。
在一些实施例中,待转化文件包括AS/400程序中文件,目标文件包括JAVA文件。
在一些实施例中,识别待转换内容对应的种类为第一类型,方法还包括:
检测到待转换内容中指针赋值语句中指针变量对应的结构或者与指针变量对应的结构共享内存的结构的值变化时,调用预设的第一封装方法进行重新赋值;
识别待转换内容对应的种类为第三类型,方法还包括:
检测到待转换内容中指针赋值语句指针变量对应结构的值变化时,调用预设的第二封装方法进行重新赋值。
根据本申请的一个方面,提供了一种文件转换装置,该装置包括:
获取模块,被配置为获取待转换文件,其中,待转换文件包括程序文件;
提取模块,被配置为提取待转化文件中的至少部分待转换内容;
识别模块,被配置为识别待转换内容对应的种类;
转换模块,被配置为基于待转换内容对应的种类,按照与种类对应的转换规则将待转换内容转换为目标文件内容。
在一些实施例中,提取模块包括:
扫描子模块,被配置为扫描待转换文件;
第一获取子模块,被配置为获取待转换文件中所有的指针变量。
在一些实施例中,获取子模块具体被配置为:
在待转换文件中定位到变量定义区域;
在变量定义区域扫描包含字符“*”所在行对应的变量。
在一些实施例中,识别待转换内容对应的种类包括第一类型、第二类型和第三类型;
其中,
第一类型用于指示指针赋值语句均为复杂类型且类型不同;
第二类型用于指示指针赋值语句类型相同;
第三类型用于指示指针赋值语句为简单类型且类型不同。
在一些实施例中,识别待转换内容对应的种类为第一类型;转换模块被配置为:
第二获取子模块,被配置为获取指针结构以及对应文件结构;
分析子模块,被配置为分析指针结构和对应文件结构之间的字段的对应关系;
第一调用子模块,被配置为对待转换内容中指针赋值语句调用第一预设封装方法进行赋值,第一预设封装方法封装有对指针结构和对应文件结构之间的变量进行的赋值。
在一些实施例中,识别待转换内容对应的种类为第二类型;转换模块包括:
转换子模块,被配置为将待转换文件中赋值语句的第一变量转换为目标文件对应的第二变量;
赋值子模块,被配置为将待转换文件中赋值语句的第一赋值方式转换为第二赋值方式进行赋值,第二赋值方式包括引用赋值方式。
在一些实施例中,识别待转换内容对应的种类为第三类型;转换模块包括:
第三获取子模块,被配置为获取指针结构以及对应结构体结构;
第四获取子模块,被配置为基于所结构体结构中的数组获取变量长度;
第二调用子模块,被配置为对待转换内容中指针赋值语句调用第二预设封装方法进行赋值,第二预设封装方法封装有对指针结构和结构体结构之间的变量进行的赋值。在一些实施例中,待转化文件包括AS/400程序中文件,目标文件包括JAVA文件。
在一些实施例中,识别待转换内容对应的种类为第一类型,该装置还包括:
第一更新子模块,被配置为检测到待转换内容中指针赋值语句中指针变量对应的结构或者与指针变量对应的结构共享内存的结构的值变化时,调用预设的第一封装方法进行重新赋值;
识别待转换内容对应的种类为第三类型,该装置还包括:
第二更新子模块,被配置为检测到待转换内容中指针赋值语句指针变量对应结构的值变化时,调用预设的第二封装方法进行重新赋值。
根据本发明实施例的另一方面,还提供了一种非易失性存储介质,该非易失性存储介质包括存储的程序,其中,程序运行时控制非易失性存储介质所在的设备执行一种文件转换方法。
根据本发明实施例的另一方面,还提供了一种文件转换装置,包含处理器和存储器,存储器中存储有计算机可读指令,处理器用于运行计算机可读指令,其中,该计算机可读指令运行时执行一种文件转换方法。
本公开提供的实施例主要为完成AS/400核心代码自动转换成分布式核心系统的JAVA代码,主要是针对指针类型赋值语句代码的转换,从而完成银行核心系统从AS/400到分布式系统的迁移。通过本公开提供的文件转换方法,可以协助完成核心系统技术平台的迁移,在不改变应用功能的前提下,完成向开放分布式架构的转型,一次性切换上线,达到国内领先水平。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本公开实施例提供的一种文件转换方法流程图;
图2是本公开实施例提供的一种文件转换方法步骤S02的方法流程图;
图3是本公开实施例提供的一种文件转换方法的步骤S12流程图;
图4是本公开实施例提供的一种文件转换方法的步骤S13流程图;
图5是本公开实施例提供的一种文件转换方法的步骤S14流程图;
图6是本公开实施例提供的一种文件结构示意图;
图7是本公开实施例提供的一种指针内存示意图;
图8是本公开实施例提供的一种JAVA内存模型示意图;
图9是本公开实施例提供的当FLOFPA01变更时内存模型示意图;
图10是本公开实施例提供的一种指针赋值语句示意图;
图11是本公开实施例提供的一种内存模型示意图;
图12是本公开实施例提供的一种执行预设语句后内存模型示意图;
图13是本公开实施例提供的一种在序列化工具类中设计出的方法示意图;
图14是本公开实施例提供的一种赋值给数组指针的场景的文件转换流程图;
图15是根据本公开实施例提供的一种文件转换方法的流程图;以及
图16是根据本申请实施例提供的文件转换装置的结构图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明提出了一种将AS/400应用程序中的指针赋值语句转换成JAVA代码的方法。在JAVA中并没有指针的概念,所以不能直接翻译或转换,需要采取特殊的处理方式,修改原有程序逻辑的同时保证功能的正确。
图1是本公开实施例提供的一种文件转换方法流程图,该方法包括以下步骤:
步骤S01、抽取AS/400应用程序中所有涉及指针的代码,并进行分类分析;
具体的,在AS/400应用程序中,首先扫描出所有指针变量。对于指针变量,其定义如表1所示:
Figure BDA0002785766840000061
表1
从表1可以看出,在AS/400程序代码中其类型为“*”表示指针。
故本公开提供的实施例可以根据在AS/400程序代码文件中的变量定义区扫描“*”所在的行可以得到所有指针类型的变量。
然后根据扫描出的指针类型的变量名称扫描程序逻辑,获取所有指针相关语句。最后根据扫描出的所有指针类型的语句,进行分类分析。
本公开提供的实施例中,可以将AS/400应用程序中涉及指针的赋值语句可分为以下几类:
第一类:指针赋值语句均为复杂类型且类型不同。
第二类:指针赋值语句类型相同。
第三类:指针赋值语句为简单类型且类型不同。
步骤S02、逐个分析每一类指针代码,并提出每一类指针代码的转换方案;
步骤S03、根据转换方案,在RPG-JAVA代码转换时进行自动转换。
由于AS/400程序中的指针很灵活,且JAVA语言中没有对应的语法,所以需要使用JAVA的语法特性实现指针的功能。根据上述的分类,逐个分析如何进行指针赋值语句的转换。
在一种可实现的方式中,分析指针赋值语句均为复杂类型且类型不同的场景,如图2所示,步骤S02转换过程具体包括以下步骤:
步骤S11、获取指针以及对应变量的结构;
因为赋值语句比较复杂,且类型不同,故需要先分享指针及对应变量的结构。
在一些可实现的方式中,该步骤可以包括以下几个步骤:
步骤111、基于预设变量定义,获取指针所属变量;
步骤114、根据指针赋值语句,获取对应变量所属的文件;
步骤114、分析文件结构,得到文件字段;
步骤114、分析指针所属变量和文件字段的对应关系。
举例说明:指针指向了文件的某一字段,为了方便说明转换的过程,以下面程序逻辑为例:程序中声明了一个逻辑文件FLOFPA01、一个数组变量DS_FLOFP和一个指针PTR_FLOFP,并且变量DS_FLOFP声明了BASED(PTR_FLOFP)如表2所示:
Figure BDA0002785766840000071
Figure BDA0002785766840000081
表2
程序逻辑中,如表3中黑色框圈出所示,逻辑文件FLOFPA01的OFPRFY1字段的地址赋值给了指针。
Figure BDA0002785766840000082
表3
此语句含义为DS_FLOFP变量和逻辑文件FLOFPA01的OFPRFY1字段共享同一块内存区域。但是,DS_FLOFP是两个变量组成的结构体,且结构体是长度为4的数组。而OFPRFY1只是一个字段变量,根据指针的含义,FLOFPA01的OFPRFY1字段后面的字段也是DS_FLOFP变量共享的区域。
为了将指针语句转换成JAVA代码,首先需要获取文件FLOFPA01中的OFPRFY1字段定义以及后面字段的定义。
S12、分析两结构之间的字段的对应关系;
在一些可实现的方式中,如图3所示,该步骤可以包括以下几个步骤:
步骤121、判断两结构之间的字段是否一一对应;
若一一对应,执行步骤123;若不是一一对应,执行步骤122。
步骤122、获取字段的长度,并进行拆分或者整合。
步骤123、判断字段之间的类型是否一致;
若不一致,对字段之间的类型进行转换。
S13、对两结构之间的变量进行赋值并封装相应的方法;
在一些可实现的方式中,如图4所示,该步骤可以包括以下几个步骤:
步骤131、根据两结构变量之间的映射关系生成赋值语句并封装相应的方法;
步骤132、将指针赋值语句转换为方法的调用。
S14、根据程序中如果对应的结构或者有其它共享内存的结构的值变化时,需要调用封装的方法进行重新赋值。
在一些可实现的方式中,如图5所示,该步骤可以包括以下几个步骤:
步骤141、判断是否还有其他文件变量和指针指向的文件变量共享内存
如果有,执行步骤142,如果没有执行步骤143;
步骤142、将共享内存的文件变量保存在全局变量链接中,供后续代码转换使用;
143、对于指针对应的变量的值发生变化时,增加指针赋值语句方法的调用。
首先需要获取文件FLOFPA01中的OFPRFY1字段定义以及后面字段的定义,具体参考图6。
其次,需要了解变量的内存模型,然后根据内存模型进行应用代码的转换。图7为本公开实施例提供的指针内存示意图。根据指针的内存模型,可以很方便转换成JAVA代码,为了使得代码更简洁,将此指针转换后的语句封装成了方法(例如本例中的setValueFromFlofpa01ToDs_flofp方法):
Figure BDA0002785766840000091
Figure BDA0002785766840000101
因而,AS/400代码中的PTR_FLOFP=%ADDR(OFPRFY1)指针语句转成JAVA代码即调用setValueFromFlofpa01ToDs_flofp()方法。
如果仅从此句分析把AS/400指针的代码转换成setValueFromFlofpa01ToDs_flofp方法调用是正确的。但如果整个程序来看,这样转换不是很完善。例如在AS/400程序中,定义逻辑文件变量FLOFPA01是为了查询数据使用的,如果程序中重新查询了数据,则指针指向的内存数据也会变化。换句话说,结构体变量的值DS_FLOFP也需要发生变量。
如果出现这种情况,因为JAVA程序逻辑已经执行过了,FLOFPA01变更时DS_FLOFP不会再发生变化,这样会导致JAVA程序的执行结果和AS/400程序执行结果不一样。图8是本公开提供的一种JAVA内存模型示意图。
图9是本公开实施例提供的当FLOFPA01变更时内存模型示意图。
图9中FLOFPA01变更参考图中黑色框出部分,从图9可看出,DS_FLOFP不会发生变化。
这情况需要分析程序的执行场景,对于指针指向了文件的某一字段的场景来说,其主要目的就是为了在FLOFPA01数据变化时,DS_FLOFP的变量的值同时需要变化。为了和AS/400程序逻辑保持一致,因而转换成分布式系统的JAVA代码时,需要在FLOFPA01变化时重新调用setValueFromFlofpa01ToDs_flofp()方法。在AS/400程序中,逻辑文件变量有两种场景,一是CHAIN语句,另外一种是READE语句。以READE语句为例,在这样的场景下,READE语句转换成JAVA语句时需添加对赋值方法的调用。
如下所示,其代码转换为:
AS/400代码:
READE%KDS(DS_FLOFP_K01:1)FLOFPA01
转换后的JAVA代码:
isExistData=DAOUtils.readNext(flofpa01SqlDataTable);
setValueFromFlofpa01ToDs_flofp();
在上述场景中,FLOFPA01值的变化会引起Ds_flofp的变化,同样,Ds_flofp的变化也会引起FLOFPA01的变化。因而需要生成下面的方法setValueFromDs_flofpToFlofpa01,将Ds_flofp给FLOFPA01赋值一遍,在给Ds_flofp赋值语句下方调用此方法。
Figure BDA0002785766840000111
综上所述,对于AS/400应用程序中的指针语法转换成JAVA语法时,不是简单的语法翻译,而需要根据实际情况修改对应逻辑才能达到同样的执行结果。在实际的指针指向了文件的某一字段这一场景转换过程中,需要考虑更多的情况:例如两个变量的类型是否一致,如果不一致需要进行转换;两个变量的长度是否一致,如果不一致还需拆分或整合。
在另一种可实现的方式中,分析指针赋值语句类型不相同的场景。对于指针赋值语句类型相同的的语句,其语法转换是比较简单的。因为赋值语句等号两边类型相同,并且是复杂类型,就相当于JAVA语法中的引用赋值,其效果是一样的。
例如:PTR_DPRTAADDIS=%ADDR(DPRTAADD.IS)
可以直接转成JAVA语法:
dprtaaddis=(Dprtaaddis)getRequest();
在另一种可实现的方式中,分析指针赋值语句为简单类型且类型不同的场景。
为了方便说明,以字符串赋值给数组指针为例说明此场景的转换。图10是本公开实施例提供的一种指针赋值语句示意图。如图10所示AS/400代码中定义了一个名为A_CYCT的结构体,另外有一个指针PTR_CYCT指向此结构体。在程序代码中,将某字段的地址赋值给此指针(PTR_CYCT=%ADDR(PD1209IS.ISRDTA))。
为了将这类指针代码转换成JAVA的语法,首先需要分析指针赋值语句的含义,其含义为将数组填充为字符串的值。为了方便说明赋值过程,先画出内存模型。
假定pd1209is.isrdta的值为“ABCDEFGH”,则其内存模型如图11所示,执行语句PTR_CYCT=%ADDR(PD1209IS.ISRDTA)后则内存模型如图12所示。
在此例子中转成JAVA语法则为:
a_cyct[0]=“ABC”;
a_cyct[1]=“DEF”;
a_cyct[2]=“GH”;
由于pd1209is.isrdta是变量,因而其语法为:
a_cyct[0]=StringUtils.substring(pd1209is.getLimtCondDataArea(),0,3);
a_cyct[1]=StringUtils.substring(pd1209is.getLimtCondDataArea(),3,3);
a_cyct[2]=StringUtils.substring(pd1209is.getLimtCondDataArea(),6,3);
其含义为截取字符串填充数组对象,pd1209is.getLimtCondDataArea()即为AS/400的pd1209is.isrdta,只是为了转换后的代码更规范,获取字段的方式改成了使用get方法并将4位的数据字典扩充为了长名。StringUtils.substring为截取字符串的方法,第二个参数表示截取的起始下标,第三个参数表示截取的长度。
这样就成功将AS/400程序中指针转换成了JAVA语法,虽然语法功能上没什么问题,但原来AS/400的一行代码转换成JAVA语法后变成了多行代码,复杂性和可维护性都降低了。因而可以进一步根据JAVA语言抽象和封装特性,封装好同一的工具类方法供代码转换使用。
在字符串赋值给数组指针的场景下,输入涉及两个要素:被截取的字符串、截取下标,以及一个输出要素:被填充的数组。因而可以在序列化工具类SerializationUtils中设计出如图13所示的方法。原AS/400中指针赋值语句可转换成以下语句:
SerializationUtils.setStringToArray(a_cyct,pd1209is.getLimtCondDataArea(),3);
通过封装,语法简洁且便于理解和转换。
综上所示,对于字符串赋值给数组指针的场景,其转换流程如图14所示:
如图14所示的流程,包括以下步骤;
步骤141、分析指针含义,封装好对应的方法;
步骤142、根据变量定义,获取指针所属变量,并获取变量的结构;
步骤143、根据数组的定义,获取变量长度;
步骤144、将指针赋值语句转换为方法的调用;
步骤145、对于指针对应的变量的值发生变化时,增加指针赋值语句方法的调用。
第一步之所以需要封装好对应的方法系列,是因为上面举的例子是最简单的例子,实际上会有更多的场景吗,因而需要重载一系列对应的方法。如果数据类型是整型,则需要重载以下方法,在setStringToArray方法内部需要进行类型转换。
public static void setStringToArray(int[]intArr,String str,int len)
public static void setStringToArray(long[]longArr,String str,int len)
更复杂的场景,对于数组并不只是一个元素,而是由多个元素组成的结构体,则需要重载以下方法:
public static void setStringToArray(IinnerClass[]innerClasses,Stringstr,int[]len)
由于结构体由多个字段组成,因而其长度也是各字段长度组成的数组。对于setStringToArray系列重载方法的具体实现来说,并不复杂,主要是将字符串进行拆解然后填充到数组中,本专利不再赘述。另外,和指针赋值语句均为复杂类型且类型不同的场景一样,除了将字符串拆解填充数组,也需要相反的操作,需要封装SerializationUtils.getStringFromArray系列方法。转换流程最后一步就是在指针涉及的变量发生变化时调用相应的方法即可。
综上所述,本发明主要阐述了一种将AS/400应用程序中指针赋值语句转换成JAVA代码的方法。在AS/400应用程序中涉及指针的代码转换成JAVA代码时,虽然JAVA代码中没有对应的指针语法,但仍然可以根据指针实现的逻辑,利用JAVA代码可以实现相同的逻辑。同时,可以利用JAVA语法抽象和封装等特性,封装好对应的方法和接口,使得转换后的JAVA语法更易于理解和维护。
图15是根据本公开实施例提供的一种文件转换方法的流程图,如图15所示的文件转换方法包括:
步骤S151、获取待转换文件,其中,待转换文件包括程序文件;
步骤S152、提取待转化文件中的至少部分待转换内容;
步骤S153、识别待转换内容对应的种类;
步骤S154、基于待转换内容对应的种类,按照与种类对应的转换规则将待转换内容转换为目标文件内容。
在一些实施例中,提取待转化文件中的至少部分待转换内容包括:
扫描待转换文件;
获取待转换文件中所有的指针变量。
在一些实施例中,获取待转换文件中所有的指针变量包括:
在待转换文件中定位到变量定义区域;
在变量定义区域扫描包含字符“*”所在行对应的变量。
在一些实施例中,识别待转换内容对应的种类包括第一类型、第二类型和第三类型;
其中,
第一类型用于指示指针赋值语句均为复杂类型且类型不同;
第二类型用于指示指针赋值语句类型相同;
第三类型用于指示指针赋值语句为简单类型且类型不同。
在一些实施例中,识别待转换内容对应的种类为第一类型;基于待转换内容对应的种
类,按照与种类对应的转换规则进行内容转换包括:
获取指针结构以及对应文件结构;
分析指针结构和对应文件结构之间的字段的对应关系;
对待转换内容中指针赋值语句调用第一预设封装方法进行赋值,第一预设封装方法封装有对指针结构和对应文件结构之间的变量进行的赋值。
在一些实施例中,识别待转换内容对应的种类为第二类型;基于待转换内容对应的种
类,按照与种类对应的转换规则进行内容转换包括:
将待转换文件中赋值语句的第一变量转换为目标文件对应的第二变量;
将待转换文件中赋值语句的第一赋值方式转换为第二赋值方式进行赋值,第二赋值方式包括引用赋值方式。
在一些实施例中,识别待转换内容对应的种类为第三类型;基于待转换内容对应的种
类,按照与种类对应的转换规则进行内容转换包括:
获取指针结构以及对应结构体结构;
基于所结构体结构中的数组获取变量长度;
对待转换内容中指针赋值语句调用第二预设封装方法进行赋值,第二预设封装方法封装有对指针结构和结构体结构之间的变量进行的赋值。
在一些实施例中,待转化文件包括AS/400程序中文件,目标文件包括JAVA文件。
在一些实施例中,识别待转换内容对应的种类为第一类型,方法还包括:
检测到待转换内容中指针赋值语句中指针变量对应的结构或者与指针变量对应的结构共享内存的结构的值变化时,调用预设的第一封装方法进行重新赋值;
识别待转换内容对应的种类为第三类型,方法还包括:
检测到待转换内容中指针赋值语句指针变量对应结构的值变化时,调用预设的第二封装方法进行重新赋值。
图16是本申请实施例提供的一种文件转换装置结构图,该装置包括:
获取模块161,被配置为获取待转换文件,其中,待转换文件包括程序文件;
提取模块162,被配置为提取待转化文件中的至少部分待转换内容;
识别模块163,被配置为识别待转换内容对应的种类;
转换模块164,被配置为基于待转换内容对应的种类,按照与种类对应的转换规则将待转换内容转换为目标文件内容。
在一些实施例中,提取模块包括:
扫描子模块,被配置为扫描待转换文件;
第一获取子模块,被配置为获取待转换文件中所有的指针变量。
在一些实施例中,获取子模块具体被配置为:
在待转换文件中定位到变量定义区域;
在变量定义区域扫描包含字符“*”所在行对应的变量。
在一些实施例中,识别待转换内容对应的种类包括第一类型、第二类型和第三类型;
其中,
第一类型用于指示指针赋值语句均为复杂类型且类型不同;
第二类型用于指示指针赋值语句类型相同;
第三类型用于指示指针赋值语句为简单类型且类型不同。
在一些实施例中,识别待转换内容对应的种类为第一类型;转换模块被配置为:
第二获取子模块,被配置为获取指针结构以及对应文件结构;
分析子模块,被配置为分析指针结构和对应文件结构之间的字段的对应关系;
第一调用子模块,被配置为对待转换内容中指针赋值语句调用第一预设封装方法进行赋值,第一预设封装方法封装有对指针结构和对应文件结构之间的变量进行的赋值。
在一些实施例中,识别待转换内容对应的种类为第二类型;转换模块包括:
转换子模块,被配置为将待转换文件中赋值语句的第一变量转换为目标文件对应的第二变量;
赋值子模块,被配置为将待转换文件中赋值语句的第一赋值方式转换为第二赋值方式进行赋值,第二赋值方式包括引用赋值方式。
在一些实施例中,识别待转换内容对应的种类为第三类型;转换模块包括:
第三获取子模块,被配置为获取指针结构以及对应结构体结构;
第四获取子模块,被配置为基于所结构体结构中的数组获取变量长度;
第二调用子模块,被配置为对待转换内容中指针赋值语句调用第二预设封装方法进行赋值,第二预设封装方法封装有对指针结构和结构体结构之间的变量进行的赋值。在一些实施例中,待转化文件包括AS/400程序中文件,目标文件包括JAVA文件。
在一些实施例中,识别待转换内容对应的种类为第一类型,该装置还包括:
第一更新子模块,被配置为检测到待转换内容中指针赋值语句中指针变量对应的结构或者与指针变量对应的结构共享内存的结构的值变化时,调用预设的第一封装方法进行重新赋值;
识别待转换内容对应的种类为第三类型,该装置还包括:
第二更新子模块,被配置为检测到待转换内容中指针赋值语句指针变量对应结构的值变化时,调用预设的第二封装方法进行重新赋值。
根据本发明实施例的另一方面,还提供了一种非易失性存储介质,该非易失性存储介质包括存储的程序,其中,程序运行时控制非易失性存储介质所在的设备执行一种文件转换方法。
根据本发明实施例的另一方面,还提供了一种文件转换装置,包含处理器和存储器,存储器中存储有计算机可读指令,处理器用于运行计算机可读指令,其中,该计算机可读指令运行时执行一种文件转换方法。
本公开还提供一种文件转换装置,所述装置包括处理器和存储器,上述获取模块161、提取模块162、识别模块163、转换模块164,等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请实施例还提供了一种非易失性存储介质,非易失性存储介质包括存储的程序,其中,程序运行时控制非易失性存储介质所在的设备执行一种文件转换方法。
本申请实施例还提供了一种电子装置,包含处理器和存储器;存储器中存储有计算机可读指令,处理器用于运行计算机可读指令,其中,计算机可读指令运行时执行一种文件转换方法。本文中的电子装置可以是服务器、PC、PAD、手机等。
本公开提供的实施例主要为完成AS/400核心代码自动转换成分布式核心系统的JAVA代码,主要是针对指针类型赋值语句代码的转换,从而完成银行核心系统从AS/400到分布式系统的迁移。通过本公开提供的文件转换方法,可以协助完成核心系统技术平台的迁移,在不改变应用功能的前提下,完成向开放分布式架构的转型,一次性切换上线,达到国内领先水平。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (12)

1.一种文件转换方法,其特征在于,所述方法包括:
获取待转换文件,其中,所述待转换文件包括程序文件;
提取所述待转化文件中的至少部分待转换内容;
识别所述待转换内容对应的种类;
基于所述待转换内容对应的种类,按照与所述种类对应的转换规则将所述待转换内容转换为目标文件内容。
2.根据权利要求1所述的文件转换方法,其特征在于,所述提取所述待转化文件中的至少部分待转换内容包括:
扫描所述待转换文件;
获取所述待转换文件中所有的指针变量。
3.根据权利要求2所述的文件转换方法,其特征在于,所述获取所述待转换文件中所有的指针变量包括:
在所述待转换文件中定位到变量定义区域;
在所述变量定义区域扫描包含字符“*”所在行对应的变量。
4.根据权利要求2所述的文件转换方法,其特征在于,所述识别所述待转换内容对应的种类包括第一类型、第二类型和第三类型;其中,
所述第一类型用于指示指针赋值语句均为复杂类型且类型不同;
所述第二类型用于指示指针赋值语句类型相同;
所述第三类型用于指示指针赋值语句为简单类型且类型不同。
5.根据权利要求4所述的方法,其特征在于,所述识别所述待转换内容对应的种类为第一类型;所述基于所述待转换内容对应的种类,按照与所述种类对应的转换规则进行内容转换包括:
获取指针结构以及对应文件结构;
分析所述指针结构和所述对应文件结构之间的字段的对应关系;
对所述待转换内容中指针赋值语句调用第一预设封装方法进行赋值,所述第一预设封装方法封装有对所述指针结构和所述对应文件结构之间的变量进行的赋值。
6.根据权利要求4所述的方法,其特征在于,所述识别所述待转换内容对应的种类为第二类型;所述基于所述待转换内容对应的种类,按照与所述种类对应的转换规则进行内容转换包括:
将待转换文件中赋值语句的第一变量转换为目标文件对应的第二变量;
将待转换文件中赋值语句的第一赋值方式转换为第二赋值方式进行赋值,所述第二赋值方式包括引用赋值方式。
7.根据权利要求4所述的方法,其特征在于,所述识别所述待转换内容对应的种类为第三类型;所述基于所述待转换内容对应的种类,按照与所述种类对应的转换规则进行内容转换包括:
获取指针结构以及对应结构体结构;
基于所结构体结构中的数组获取变量长度;
对所述待转换内容中指针赋值语句调用第二预设封装方法进行赋值,所述第二预设封装方法封装有对所述指针结构和所述结构体结构之间的变量进行的赋值。
8.根据权利要求4所述的方法,其特征在于,所述待转化文件包括AS/400程序中文件,所述目标文件包括JAVA文件。
9.根据权利要求5或7任一项所述的方法,其特征在于,所述识别所述待转换内容对应的种类为第一类型,所述方法还包括:
检测到待转换内容中指针赋值语句中指针变量对应的结构或者与所述指针变量对应的结构共享内存的结构的值变化时,调用预设的第一封装方法进行重新赋值;
所述识别所述待转换内容对应的种类为第三类型,所述方法还包括:
检测到待转换内容中指针赋值语句指针变量对应结构的值变化时,调用预设的第二封装方法进行重新赋值。
10.一种文件转换装置,其特征在于,所述装置包括:
获取模块,被配置为获取待转换文件,其中,所述待转换文件包括程序文件;
提取模块,被配置为提取所述待转化文件中的至少部分待转换内容;
识别模块,被配置为识别所述待转换内容对应的种类;
转换模块,被配置为基于所述待转换内容对应的种类,按照与所述种类对应的转换规则将所述待转换内容转换为目标文件内容。
11.一种非易失性存储介质,其特征在于,所非易失性存储介质包括存储的程序,其中,所述程序运行时控制所述非易失性存储介质所在的设备执行权利要求1至9中任意一项所述的文件转换方法。
12.一种文件转换装置,其特征在于,包含处理器和存储器,所述存储器中存储有计算机可读指令,所述处理器用于运行所述计算机可读指令,其中,所述计算机可读指令运行时执行权利要求1至9中任意一项所述的文件转换方法。
CN202011297297.4A 2020-11-18 2020-11-18 文件转换方法、装置及存储介质 Pending CN112416365A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011297297.4A CN112416365A (zh) 2020-11-18 2020-11-18 文件转换方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011297297.4A CN112416365A (zh) 2020-11-18 2020-11-18 文件转换方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN112416365A true CN112416365A (zh) 2021-02-26

Family

ID=74774292

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011297297.4A Pending CN112416365A (zh) 2020-11-18 2020-11-18 文件转换方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN112416365A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112947938A (zh) * 2021-03-23 2021-06-11 广州趣丸网络科技有限公司 一种文件转化方法、装置、电子设备及存储介质
CN113360184A (zh) * 2021-06-04 2021-09-07 曙光信息产业(北京)有限公司 多生态间的软件迁移方法、装置、计算机设备及存储介质
CN114428615A (zh) * 2022-01-26 2022-05-03 北京有竹居网络技术有限公司 Css编译方法、样式更新方法、装置、介质及设备
CN114428615B (zh) * 2022-01-26 2024-05-17 北京有竹居网络技术有限公司 Css编译方法、样式更新方法、装置、介质及设备

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112947938A (zh) * 2021-03-23 2021-06-11 广州趣丸网络科技有限公司 一种文件转化方法、装置、电子设备及存储介质
CN112947938B (zh) * 2021-03-23 2024-04-30 广州趣丸网络科技有限公司 一种文件转化方法、装置、电子设备及存储介质
CN113360184A (zh) * 2021-06-04 2021-09-07 曙光信息产业(北京)有限公司 多生态间的软件迁移方法、装置、计算机设备及存储介质
CN114428615A (zh) * 2022-01-26 2022-05-03 北京有竹居网络技术有限公司 Css编译方法、样式更新方法、装置、介质及设备
CN114428615B (zh) * 2022-01-26 2024-05-17 北京有竹居网络技术有限公司 Css编译方法、样式更新方法、装置、介质及设备

Similar Documents

Publication Publication Date Title
CN111708539B (zh) 一种应用程序代码转换方法、装置、电子设备和存储介质
CN110825385B (zh) React Native离线包的构建方法及存储介质
CN112416365A (zh) 文件转换方法、装置及存储介质
CN113031932B (zh) 项目开发方法、装置、电子设备及存储介质
CN109062906B (zh) 程序语言资源的翻译方法及装置
CN113010169A (zh) 用于将ui图转换成代码文件的方法和装置
CN112558984A (zh) 代码编译的方法、装置、电子设备以及服务器
CN114489629A (zh) 一种基于接口文档的快速开发和测试方法
CN111488155A (zh) 着色语言翻译方法
CN111159278A (zh) 数据展示方法及装置、电子设备和计算机可读存储介质
CN110737431B (zh) 软件开发方法、开发平台、终端设备及存储介质
CN112799697A (zh) 一种基于标准框架的配置文件版本迁移方法
CN109858169B (zh) 一种基于Modelica的模型平坦化方法
CN117075912B (zh) 用于程序语言转换的方法、编译方法及相关设备
CN115203132B (zh) 一种用于按需求快速提取op2文件架构的设计方法
CN117270962B (zh) 一种处理着色语言的方法、装置、存储介质及电子设备
CN112445784B (zh) 一种文本结构化的方法、设备及系统
CN117407102A (zh) 软件项目国际化的方法、工具、存储介质及服务器
CN100403322C (zh) 一种实现随机存储器封装的方法
CN116975087A (zh) 一种异构数据源的检索方法、装置、设备和介质
CN116755691A (zh) 一种基于标识解析的数据对比方法、设备及介质
CN116301770A (zh) 数据的处理方法及装置、存储介质和电子设备
CN114090007A (zh) 适应开发语言的多语言文本生成方法、终端及存储介质
CN117971350A (zh) 小程序运行方法、装置和计算机可读存储介质
CN116560718A (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