本發(fā)明屬于數(shù)據(jù)比較技術(shù)領(lǐng)域,特別是涉及一種文件比較方法及裝置。
背景技術(shù):
伴隨著業(yè)務(wù)延展,在程序測試過程中,需要對形式多樣的文件執(zhí)行文件比較。其中,文件比較包括文本比較(Text Compare)與二進(jìn)制比較(Binary Compare)兩種類型,旨在通過文件之間的比較,確定兩份文件之間是否存在差異,并在確定存在差異時,能夠快速定位差異的地方。
但是,現(xiàn)有的文件比較方法存在著效率低下的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例解決的問題是如何提高文件比較的效率。
為解決上述問題,本發(fā)明實施例提供了一種文件比較方法,所述方法包括:將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換;對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較,得到一一對應(yīng)不同的數(shù)據(jù)行;對所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行執(zhí)行行內(nèi)比較。
可選地,當(dāng)所述比較文件和被比較文件為文本文件或者表數(shù)據(jù)逗號分隔值文件時,所述將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換,包括:將所述比較文件和被比較文件中相應(yīng)數(shù)據(jù)列的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。
可選地,當(dāng)所述比較文件和被比較文件為二進(jìn)制文件時,所述將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換,包括:將所述比較文件和被比較文件中的相應(yīng)字節(jié)的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。
可選地,所述對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較,包括:獲取預(yù)配置的默認(rèn)載入行數(shù)的信息;所述默認(rèn)載入行數(shù)包括預(yù)設(shè)數(shù)量的比較行數(shù)的信息;基于預(yù)配置的默認(rèn)載入行數(shù)的信息,對所述比較文件和被比較文件執(zhí)行行間比較。
可選地,所述基于預(yù)配置的默認(rèn)載入行數(shù)的信息,對所述比較文件和被比較文件執(zhí)行行間比較,包括:分別獲取所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行;所述當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行大于預(yù)設(shè)的第一閾值且小于預(yù)設(shè)的第二閾值,所述第一閾值小于所述默認(rèn)載入行數(shù),所述第二閾值大于所述默認(rèn)載入行數(shù);將所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行進(jìn)行比較。
可選地,所述將所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行進(jìn)行比較,包括:對所述比較文件的當(dāng)前比較窗口中數(shù)據(jù)行進(jìn)行遍歷,獲取所述比較文件的當(dāng)前比較窗口中當(dāng)前位序的數(shù)據(jù)行,并與所述被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行逐一進(jìn)行比較;當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)未查找到與所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行相同數(shù)據(jù)行時,獲取所述比較文件的當(dāng)前比較窗口內(nèi)的下一位序的數(shù)據(jù)行,并執(zhí)行所述與所述被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行逐一進(jìn)行比較的操作。
可選地,當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)查找到與所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行時,所述將所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行進(jìn)行比較,還包括:將所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行與所述被比較文件當(dāng)前比較窗口內(nèi)的目標(biāo)位序的數(shù)據(jù)行標(biāo)記為相同;判斷所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量是否相同;當(dāng)確定所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同時,分別將當(dāng)前比較窗口內(nèi)所述前位序及之前的數(shù)據(jù)行,與所述被比較文件的當(dāng)前比較窗口內(nèi)所述目標(biāo)位序及之前的數(shù)據(jù)行移除;當(dāng)確定所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量不同時,為數(shù)據(jù)行數(shù)量較少的所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序與上一位序之間或者所述被比較文件的當(dāng)前比較窗口內(nèi)目標(biāo)位序與上一位序之間添加對應(yīng)數(shù)量的空數(shù)據(jù)行,以使得所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行一一對應(yīng),并將所述比較文件中當(dāng)前比較窗口內(nèi)當(dāng)前位序及之前的數(shù)據(jù)行,以及所述被比較文件中目標(biāo)位序的數(shù)據(jù)行及之前的數(shù)據(jù)行移除。
可選地,當(dāng)從所述比較文件或者被比較文件的當(dāng)前比較窗口移除相應(yīng)的數(shù)據(jù)行之后,所述方法還包括:判斷所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量是否小于預(yù)設(shè)的第一閾值;當(dāng)確定所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量小于所述第一閾值時,獲取所述比較文件中下一所述默認(rèn)載入行數(shù)的數(shù)據(jù)行并添加至所述比較文件中當(dāng)前比較窗口末尾,作為所述比較文件的當(dāng)前比較窗口,或者將所述比較文件的中下一默認(rèn)載入行數(shù)的數(shù)據(jù)行添加至所述被比較文件中當(dāng)前比較窗口末尾,作為所述被比較文件的當(dāng)前比較窗口,直至所述比較文件或者被比較文件的所有數(shù)據(jù)行遍歷完成。
可選地,所述對所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行執(zhí)行行內(nèi)比較,包括:判斷所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行是否均為非空數(shù)據(jù)行;當(dāng)確定所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行均為非空數(shù)據(jù)行時,對所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行執(zhí)行行內(nèi)比較。
可選地,將所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行中一個作為比較行,另一個作為被比較行,所述對所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行執(zhí)行行內(nèi)比較,包括:分別對所述比較行和被比較行的字符從尾至頭進(jìn)行遍歷并比較,直至所述比較行與所述被比較行中相應(yīng)位序的字符不同;將通過從尾至頭遍歷得到的所比較文件和所述被比較文件中相應(yīng)位序的字符之后的字符標(biāo)記為相同并分別從所述比較行和所述被比較行中移除;將所述比較行與所述被比較行中剩余的字符從頭至尾進(jìn)行比較,得到對應(yīng)的比較結(jié)果。
可選地,所述將所述比較行與所述被比較行中剩余的字符從頭至尾進(jìn)行比較,包括:從頭至尾遍歷所述比較行的剩余字符;將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較;判斷所述被比較行的剩余字符中是否存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符;當(dāng)確定所述被比較行的剩余字符中不存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符時,獲取比較行的剩余字符中下一位序字符,并從所述將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較開始執(zhí)行,直至所述比較行的剩余字符遍歷完畢。
可選地,當(dāng)確定所述被比較行的剩余字符中存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符時,所述方法還包括:將所述比較行的剩余字符中當(dāng)前位序的字符與所述被比較行的剩余字符中目標(biāo)位序的字符標(biāo)記為相同;將所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符,分別作為所述比較行的剩余字符和所述被比較行的剩余字符,并從所述從頭至尾遍歷所述比較行的剩余字符開始執(zhí)行,以找到其他的相同字符并記錄,直至所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符全部遍歷完成;獲取最后一次記錄的相同字符的信息,并將對應(yīng)的比較行中的字符記為第一相同位序的字符,對應(yīng)的被比較行中的字符記為第二相同位序的字符;將所述比較行的剩余字符中所述第一相同位序之后的字符作為所述比較行的剩余字符,將所述被比較行的剩余字符中所述第二相同位序之后的字符作為所述被比較行的剩余字符,并從所述從頭至尾遍歷所述比較行的剩余字符開始執(zhí)行,以找到所述比較行的剩余字符中所述第一相同位序之后的字符中與所述被比較行的剩余字符中所述第二相同位序之后的字符中相同的字符并記錄,直至所述比較行中所述第一相同位序之后的字符或者所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符遍歷完成。
可選地,所述方法還包括:按照預(yù)設(shè)的報表格式生成對應(yīng)的比較報告并輸出。
本發(fā)明實施例還提供了一種文件比較裝置,包括:替換單元,適于將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換;行間比較單元,適于對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較,得到一一對應(yīng)不同的數(shù)據(jù)行;行內(nèi)比較單元,適于對所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行執(zhí)行行內(nèi)比較。
可選地,所述替換單元,適于當(dāng)所述比較文件和被比較文件為文本文件或者表數(shù)據(jù)逗號分隔值文件時,將所述比較文件和被比較文件中相應(yīng)數(shù)據(jù)列的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。
可選地,所述替換單元,適于當(dāng)所述比較文件和被比較文件為二進(jìn)制文件時,將所述比較文件和被比較文件中的相應(yīng)字節(jié)的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。
可選地,所述行間比較單元,包括第一獲取子單元和第一比較子單元;所述第一獲取子單元,適于獲取預(yù)配置的默認(rèn)載入行數(shù)的信息;所述默認(rèn)載入行數(shù)包括預(yù)設(shè)數(shù)量的比較行數(shù)的信息;所述第一比較子單元,適于基于預(yù)配置的默認(rèn)載入行數(shù)的信息,對所述比較文件和被比較文件執(zhí)行行間比較。
可選地,所述第一比較子單元,包括第一獲取模塊和第一比較模塊;所述第一獲取模塊,適于分別獲取所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行;所述當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行大于預(yù)設(shè)的第一閾值且小于預(yù)設(shè)的第二閾值,所述第一閾值小于所述默認(rèn)載入行數(shù),所述第二閾值大于所述默認(rèn)載入行數(shù);所述第一比較模塊,適于將所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行進(jìn)行比較。
可選地,所述第一比較模塊,包括:第一遍歷子模塊,適于對所述比較文件的當(dāng)前比較窗口中數(shù)據(jù)行進(jìn)行遍歷,獲取所述比較文件的當(dāng)前比較窗口中當(dāng)前位序的數(shù)據(jù)行,并與所述被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行逐一進(jìn)行比較;第一比較子模塊,適于當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)未查找到與所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行相同數(shù)據(jù)行時,獲取所述比較文件的當(dāng)前比較窗口內(nèi)的下一位序的數(shù)據(jù)行,并執(zhí)行所述與所述被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行逐一進(jìn)行比較的操作。
可選地,所述第一比較模塊,還包括:第一標(biāo)記子模塊,適于當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)查找到與所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行時,將所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行與所述被比較文件當(dāng)前比較窗口內(nèi)的目標(biāo)位序的數(shù)據(jù)行標(biāo)記為相同;第一判斷子模塊,適于判斷所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量是否相同;第一移除子模塊,適于當(dāng)確定所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同時,分別將當(dāng)前比較窗口內(nèi)所述前位序及之前的數(shù)據(jù)行,與所述被比較文件的當(dāng)前比較窗口內(nèi)所述目標(biāo)位序及之前的數(shù)據(jù)行移除;第一添加子模塊,適于當(dāng)確定所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量不同時,為數(shù)據(jù)行數(shù)量較少的所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序與上一位序之間或者所述被比較文件的當(dāng)前比較窗口內(nèi)目標(biāo)位序與上一位序之間添加對應(yīng)數(shù)量的空數(shù)據(jù)行,以使得所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行一一對應(yīng);所述第一移除子模塊,還適于當(dāng)所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行一一對應(yīng)時,將所述比較文件中當(dāng)前比較窗口內(nèi)當(dāng)前位序及之前的數(shù)據(jù)行,以及所述被比較文件中目標(biāo)位序的數(shù)據(jù)行及之前的數(shù)據(jù)行移除。
可選地,所述第一比較模塊,還包括:第二判斷子模塊,適于在所述比較文件或者被比較文件的當(dāng)前比較窗口移除相應(yīng)的數(shù)據(jù)行之后,判斷所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量是否小于預(yù)設(shè)的第一閾值;第二添加子模塊,適于當(dāng)確定所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量小于所述第一閾值時,獲取所述比較文件中下一所述默認(rèn)載入行數(shù)的數(shù)據(jù)行并添加至所述比較文件中當(dāng)前比較窗口末尾,作為所述比較文件的當(dāng)前比較窗口,或者將所述比較文件的中下一默認(rèn)載入行數(shù)的數(shù)據(jù)行添加至所述被比較文件中當(dāng)前比較窗口末尾,作為所述被比較文件的當(dāng)前比較窗口,直至所述比較文件或者被比較文件的所有數(shù)據(jù)行遍歷完成。
可選地,所述行內(nèi)比較單元,包括:第三判斷子單元,適于判斷所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行是否均為非空數(shù)據(jù)行;行內(nèi)比較子單元,適于當(dāng)確定所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行均為非空數(shù)據(jù)行時,對所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行執(zhí)行行內(nèi)比較。
可選地,將所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行中一個作為比較行,另一個作為被比較行,所述行內(nèi)比較子單元包括:移除模塊,適于分別對所述比較行和被比較行的字符從尾至頭進(jìn)行遍歷并比較,直至所述比較行與所述被比較行中相應(yīng)位序的字符不同;將通過從尾至頭遍歷得到的所比較文件和所述被比較文件中相應(yīng)位序的字符之后的字符標(biāo)記為相同并分別從所述比較行和所述被比較行中移除;第二比較模塊,將所述比較行與所述被比較行中剩余的字符從頭至尾進(jìn)行比較,得到對應(yīng)的比較結(jié)果。
可選地,所述第二比較模塊,包括:第一遍歷子模塊,適于從頭至尾遍歷所述比較行的剩余字符;第二比較子模塊,將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較;當(dāng)確定所述被比較行的剩余字符中不存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符時,獲取比較行的剩余字符中下一位序字符,并從所述將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較開始執(zhí)行,直至所述比較行的剩余字符遍歷完畢。
可選地,所述第二比較模塊,還包括:第二標(biāo)記子模塊,適于當(dāng)確定所述被比較行的剩余字符中存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符時,將所述比較行的剩余字符中當(dāng)前位序的字符與所述被比較行的剩余字符中目標(biāo)位序的字符標(biāo)記為相同;第一更新子模塊,適于將所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符,分別作為所述比較行的剩余字符和所述被比較行的剩余字符;第三比較子模塊,適于從所述從頭至尾遍歷所述比較行的剩余字符開始執(zhí)行,以找到其他的相同字符并記錄,直至所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符全部遍歷完成;獲取子模塊,適于獲取最后一次記錄的相同字符的信息,并將對應(yīng)的比較行中的字符記為第一相同位序的字符,對應(yīng)的被比較行中的字符記為第二相同位序的字符;第二更新子模塊,適于將所述比較行的剩余字符中所述第一相同位序之后的字符作為所述比較行的剩余字符,將所述被比較行的剩余字符中所述第二相同位序之后的字符作為所述被比較行的剩余字符;第四比較子模塊,適于從所述從頭至尾遍歷所述比較行的剩余字符開始執(zhí)行,以找到所述比較行的剩余字符中所述第一相同位序之后的字符中與所述被比較行的剩余字符中所述第二相同位序之后的字符中相同的字符并記錄,直至所述比較行中所述第一相同位序之后的字符或者所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符遍歷完成。
可選地,所述裝置還包括:輸出單元,適于按照預(yù)設(shè)的報表格式生成對應(yīng)的比較報告并輸出。
與現(xiàn)有技術(shù)相比,本發(fā)明的技術(shù)方案具有以下的優(yōu)點:
上述的方案,將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換,并對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較和行內(nèi)比較,可以將比較文件和被比較文件中無需進(jìn)行比較的內(nèi)容從比較內(nèi)容中進(jìn)行移除,可以有效減少比較數(shù)據(jù)的數(shù)量,從而可以提高文件比較的效率。
進(jìn)一步地,在對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較時,采用浮動窗口大小將比較文件和被比較文件的比較內(nèi)容限定在預(yù)設(shè)的數(shù)量范圍內(nèi),可以避免由于比較內(nèi)容較大所導(dǎo)致的比較失敗,從而可以提高文件比較的可靠性。
進(jìn)一步地,在執(zhí)行不同非空數(shù)據(jù)行之間的行內(nèi)比較時,首先從尾至頭分別對比較行和被比較行進(jìn)行遍歷,直至所述比較行與所述被比較行中相應(yīng)位序的字符不同,并將比較行和被比較行中處于從尾至頭遍歷至的相同位序且相同的字符從比較窗口中移除,以減少比較內(nèi)容,從而可以提高行內(nèi)比較的效率,進(jìn)而可以提高文件比較的效率。
進(jìn)一步地,在對所述比較行和被比較行的剩余字符進(jìn)行比較,且確定所述比較行的剩余字符中第一位序的字符與被比較行的剩余字符中第二位序的字符相同時,將所述比較行的剩余字符中第一位序的字符與被比較行的剩余字符中第二位序的字符記錄為相同位置,并將所述比較行和被比較行的剩余字符中第一位序至所述第二位序之間分別作為剩余字符繼續(xù)尋找相同的字符,通過不斷縮小比較窗口內(nèi)的字符的數(shù)量,通過不斷縮小比較窗口的大小,可以準(zhǔn)確地定位所述比較行與所述被比較行中的不同位置,可以進(jìn)一步提高數(shù)據(jù)行行內(nèi)字符比較的準(zhǔn)確性,進(jìn)而可以進(jìn)一步提高文件比較的準(zhǔn)確性。
附圖說明
圖1是本發(fā)明實施例中一種的文件比較方法的流程圖;
圖2至圖3是本發(fā)明實施例中另一種行間比較方法的流程圖;
圖4至圖9是本發(fā)明實施例中的行間比較方法的實例示意圖;
圖10是圖13本發(fā)明實施例中一種行內(nèi)比較方法的流程圖;
圖14至圖18是本發(fā)明實施例中的行內(nèi)比較方法的實例示意圖;
圖19是本發(fā)明實施例中的一種文件比較裝置的結(jié)構(gòu)示意圖。
具體實施方式
正如背景技術(shù)所言,現(xiàn)有的文件比較方法存在著效率低下的問題。
為解決上述問題,本發(fā)明實施例中的技術(shù)方案通過將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換,并對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較和行內(nèi)比較,可以將比較文件和被比較文件中無需進(jìn)行比較的內(nèi)容從比較內(nèi)容中進(jìn)行移除,可以有效減少比較數(shù)據(jù)的數(shù)量,從而可以提高文件比較的效率。
為使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施例做詳細(xì)的說明。
圖1是本發(fā)明實施例中的一種文件比較方法的流程圖。如圖1所示的文件比較方法,可以包括:
步驟S101:將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換。
在具體實施中,所述替換內(nèi)容可以根據(jù)比較文件和被比較文件的比較需求進(jìn)行設(shè)定,也即可以由用戶采用自定義的方式進(jìn)行設(shè)置。
在本發(fā)明一實施例中,當(dāng)所述比較文件和被比較文件為文本文件時,將比較文件和被比較文件中相應(yīng)數(shù)據(jù)列的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。其中,對應(yīng)的替換內(nèi)容可以采用正則表達(dá)式的方式。
在本發(fā)明另一實施例中,當(dāng)所述比較文件和被比較文件為數(shù)據(jù)庫表導(dǎo)出的表數(shù)據(jù)逗號分隔值(Comma-Separated Values,CSV)文件時,將所述比較文件和被比較文件中相應(yīng)數(shù)據(jù)列的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。例如,將比較文件和被比較文件的數(shù)據(jù)行的數(shù)據(jù)插入時間所在的數(shù)據(jù)列采用對應(yīng)的替換內(nèi)容進(jìn)行替換。
在本發(fā)明又一實施例中,當(dāng)比較文件和被比較文件為二進(jìn)制文件時,將所述比較文件和被比較文件中相應(yīng)字節(jié)的內(nèi)容采用自定義的替換內(nèi)容進(jìn)行替換。例如,將所述比較文件和被比較文件中所有數(shù)據(jù)行中第3個字節(jié)到第10個字節(jié)所在時間數(shù)據(jù)列采用對應(yīng)的替換內(nèi)容進(jìn)行替換。
步驟S102:對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較,得到一一對應(yīng)不同的數(shù)據(jù)行。
在具體實施中,當(dāng)將比較文件和被比較文件的所有數(shù)據(jù)行均采用對應(yīng)的替換內(nèi)容進(jìn)行替換后,將替換后的比較文件和被比較文件執(zhí)行行間比較。其中,替換后的比較文件和被比較文件執(zhí)行行間比較時,可以采用現(xiàn)有技術(shù)中的行間比較方法。
為了減少行間比較所占用的資源,從而提高行間比較的準(zhǔn)確性和可靠性,在本發(fā)明一實施例中,可以采用浮動窗口的方式對比較文件和被比較文件執(zhí)行行間比較,具體請參見圖2至圖9。
步驟S103:對所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行執(zhí)行行內(nèi)比較。
在具體實施中,當(dāng)確定比較文件和被比較文件中不同的數(shù)據(jù)行時,可以對比較文件和被比較文件中相應(yīng)的數(shù)據(jù)行執(zhí)行行內(nèi)比較,以確定具體的差異部分。
在具體實施中,當(dāng)對所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行執(zhí)行行內(nèi)比較時,可以采用現(xiàn)有技術(shù)中的行間比較方法進(jìn)行,本領(lǐng)域的技術(shù)人員可以根據(jù)實際的需要選擇。
為了提高行內(nèi)比較的準(zhǔn)確性和效率,在本發(fā)明一實施例中,采用先從尾至頭的順序移除比較行與被比較行尾部相同的字符,再將比較行和被比較行的剩余字符從頭至尾進(jìn)行比較,具體請參見圖10至圖18。
在具體實施中,為了提高文件比較結(jié)果輸出的靈活性,本發(fā)明實施例中的文件比較方法還可以包括:
步驟S104:按照預(yù)設(shè)的報表格式生成對應(yīng)的比較報告并輸出。
在具體實施中,預(yù)設(shè)的報表格式可以根據(jù)實際的需要進(jìn)行靈活設(shè)置,本發(fā)明在此不做限制。
上述的方案,通過將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換,并對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較和行內(nèi)比較,可以將比較文件和被比較文件中無需進(jìn)行比較的內(nèi)容從比較內(nèi)容中進(jìn)行移除,可以有效減少比較數(shù)據(jù)的數(shù)量,從而可以提高文件比較的效率。
下面將對本發(fā)明實施例中的文件比較方法進(jìn)行進(jìn)一步詳細(xì)的介紹。
圖2示出了本發(fā)明實施例中的一種文件比較方法中的行間比較方法的流程圖。參見圖2,在對文件中的數(shù)據(jù)行執(zhí)行行間比較時,可以采用如下的步驟實現(xiàn):
步驟S201:獲取預(yù)配置的默認(rèn)載入行數(shù)的信息。
在具體實施中,所述預(yù)配置的默認(rèn)載入行數(shù)的信息包括數(shù)據(jù)行的默認(rèn)載入行數(shù)的信息。其中,預(yù)配置的比較默認(rèn)載入行數(shù)可以根據(jù)實際的需要進(jìn)行設(shè)置,如設(shè)置為10行、20行等。
步驟S202:基于所述預(yù)配置的默認(rèn)載入行數(shù)的信息,對所述比較文件和被比較文件執(zhí)行行間比較。
在具體實施中,可以將待比較的兩個文件中,其一稱為比較文件,另一者稱為被比較文件。當(dāng)確定對應(yīng)的比較窗口內(nèi)默認(rèn)載入行數(shù)的比較行數(shù)的信息時,可以基于預(yù)配置的默認(rèn)載入行數(shù)的信息,對所述比較文件和被比較文件執(zhí)行行間比較,具體請參見圖3。
參見圖3,在本發(fā)明一實施例中,所述基于預(yù)配置的默認(rèn)載入行數(shù)的信息,對所述比較文件和被比較文件執(zhí)行行間比較,可以采用如下的步驟實現(xiàn):
步驟S301:分別獲取比較文件與所述被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行。
在具體實施中,當(dāng)首次獲取時,比較文件和被比較文件中當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行為所述默認(rèn)載入行數(shù)的數(shù)據(jù)行,如10行等;當(dāng)非首次獲取時,比較文件和被比較文件中當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行將在第一閾值和第二閾值之間浮動。其中,第一閾值和第二閾值與所述默認(rèn)載入行數(shù)關(guān)聯(lián),且第一閾值小于所述默認(rèn)載入行數(shù),第二閾值大于所述默認(rèn)載入行數(shù)。例如,當(dāng)默認(rèn)載入行數(shù)為9時,第一閾值和第二閾值可以分別設(shè)置為4行和18行。
步驟S302:對所述比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行進(jìn)行遍歷,獲取遍歷到的比較文件當(dāng)前比較窗口中當(dāng)前位序的數(shù)據(jù)行。
在具體實施中,當(dāng)獲取到比較文件和被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行時,可以對比較文件和被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行進(jìn)行逐一比較。具體而言,可以首先對比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行按照順序進(jìn)行遍歷,并將遍歷到的數(shù)據(jù)行作為比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行。
參見圖4,當(dāng)預(yù)配置的默認(rèn)載入行數(shù)的信息包括9個數(shù)據(jù)行時,在第一次獲取時,比較文件的當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行L1~L9,被比較文件當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行R1~R9。接著,對比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行L1~L9按照順序進(jìn)行遍歷,首先獲取數(shù)據(jù)行L1,作為比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行。
步驟S303:將所述比較文件的當(dāng)前比較窗口中當(dāng)前位序的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的所有數(shù)據(jù)行逐一進(jìn)行比較。
在具體實施中,可以將比較文件的當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行與被比較文件當(dāng)前比較窗口內(nèi)的所有數(shù)據(jù)行逐一進(jìn)行比較,以從被比較文件當(dāng)前比較窗口內(nèi)查找到與比較文件當(dāng)前比較窗口當(dāng)前位序的數(shù)據(jù)行相同的數(shù)據(jù)行。
繼續(xù)參見圖4,將比較文件當(dāng)前比較窗口當(dāng)前位序的數(shù)據(jù)行L1依次與被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行R1~R9依次進(jìn)行比較,以確定數(shù)據(jù)行R1~R9中是否存在與數(shù)據(jù)行L1相同的數(shù)據(jù)行。
步驟S304:判斷從所述被比較文件當(dāng)前比較窗口內(nèi)是否查找到與所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行;當(dāng)判斷結(jié)果為是時,可以執(zhí)行步驟S306;反之,則可以執(zhí)行步驟S305。
步驟S305:獲取所述比較文件的當(dāng)前比較窗口內(nèi)的下一位序的數(shù)據(jù)行,并從步驟S302重新開始執(zhí)行。
在具體實施中,當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)未查找到與所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行時,則獲取比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之后的下一位序的數(shù)據(jù)行,并分別與被比較文件當(dāng)前比較窗口的所有數(shù)據(jù)行分別進(jìn)行比較,也即對當(dāng)前比較窗口內(nèi)當(dāng)前位序之后的下一位序的數(shù)據(jù)行從步驟S302重新開始執(zhí)行,直至比較文件當(dāng)前窗口內(nèi)的數(shù)據(jù)行遍歷完畢。
步驟S306:將所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行與所述被比較文件當(dāng)前比較窗口內(nèi)的目標(biāo)位序的數(shù)據(jù)行標(biāo)記為相同。
在具體實施中,當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)查找到與所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行時,便可以將所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行與所述被比較文件當(dāng)前比較窗口內(nèi)的目標(biāo)位序的數(shù)據(jù)行標(biāo)記為相同。
繼續(xù)參見圖4,通過將比較文件當(dāng)前比較窗口的數(shù)據(jù)行L1與被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行R1~R9依次進(jìn)行比較,確定比較文件當(dāng)前比較窗口的數(shù)據(jù)行L1與被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行R1相同。此時,便可以將比較文件當(dāng)前比較窗口的數(shù)據(jù)行L1與被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行R1記錄為相同。
步驟S307:判斷所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量是否相同;當(dāng)判斷結(jié)果為是時,可以執(zhí)行步驟S308;反之,則可以執(zhí)行步驟S309。
步驟S308:將所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序及之前的數(shù)據(jù)行,與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序及之前的數(shù)據(jù)行移除。
在具體實施中,當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)查找到與所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行,且所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行,與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同時,則可以直接將所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行從比較文件當(dāng)前比較窗口內(nèi)移除,并將所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行從所述被比較文件的當(dāng)前比較窗口內(nèi)移除。
繼續(xù)參見圖4,當(dāng)通過比較確定比較文件當(dāng)前比較窗口當(dāng)前位序的數(shù)據(jù)行L1與被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行R1相同時,且比較文件當(dāng)前比較窗口當(dāng)前位序的數(shù)據(jù)行L1之前,以及被比較文件當(dāng)前比較窗口內(nèi)的目標(biāo)位序的數(shù)據(jù)行R1之前的數(shù)據(jù)行均為零,也即所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行,與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同時,可以直接執(zhí)行將數(shù)據(jù)行L1從比較文件的當(dāng)前比較窗口內(nèi)移除,并將數(shù)據(jù)行R1從被比較文件的當(dāng)前比較窗口內(nèi)移除的操作。
當(dāng)執(zhí)行移除操作之后,比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行包括數(shù)據(jù)行L2~L9,被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行包括數(shù)據(jù)行R2~R9。
步驟S309:為數(shù)據(jù)行數(shù)量較少的所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序數(shù)據(jù)行與上一位序的數(shù)據(jù)行之間,或者所述被比較文件的當(dāng)前比較窗口內(nèi)目標(biāo)位序的數(shù)據(jù)行與上一位序的數(shù)據(jù)行之間添加相應(yīng)數(shù)量的空數(shù)據(jù)行,以使得所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同,并執(zhí)行步驟S308。
在具體實施中,當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)查找到與所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行,且所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行,與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量不相同時,可以為數(shù)據(jù)行數(shù)量較少的比較文件的當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行之前添加對應(yīng)數(shù)量的數(shù)據(jù)行,或者為數(shù)據(jù)行數(shù)量較少的被比較文件當(dāng)前比較窗口內(nèi)目標(biāo)位序的數(shù)據(jù)行之前添加對應(yīng)數(shù)量的數(shù)據(jù)行,以使得比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行的數(shù)量,與被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同,從而使得比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序及之前的數(shù)據(jù)行分別與比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序及之前的數(shù)據(jù)行一一對應(yīng)。
參見圖5,在數(shù)據(jù)行L1和數(shù)據(jù)行R1移除之后,將數(shù)據(jù)行L2依次和數(shù)據(jù)行R2~R9依次進(jìn)行比較,確定數(shù)據(jù)行L2與數(shù)據(jù)行R6相同。此時,由于比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行L2之前的數(shù)據(jù)行為空,被比較文件當(dāng)前比較窗口內(nèi)目標(biāo)位序的數(shù)據(jù)行L6之前的數(shù)據(jù)行的數(shù)量為4,即數(shù)據(jù)行R2~R4,即比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行L2之前的數(shù)據(jù)行的數(shù)量,小于被比較文件當(dāng)前比較窗口內(nèi)目標(biāo)位序的數(shù)據(jù)行L6之前的數(shù)據(jù)行的數(shù)量。此時,可以在比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行L2之前添加數(shù)量為4的空數(shù)據(jù)行,以使得比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行L2之前的數(shù)據(jù)行也為4,從而使得比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行L2之前的數(shù)據(jù)行與被比較文件當(dāng)前比較窗口內(nèi)目標(biāo)位序的數(shù)據(jù)行L6之前的數(shù)據(jù)行一一對應(yīng)。
在具體實施中,通過添加相應(yīng)的空數(shù)據(jù)行,使得比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行的數(shù)量,與被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同時,可以將比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序及之前的數(shù)據(jù)行,以及被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行移除。
參見圖6,在將數(shù)據(jù)行L2及之前的數(shù)據(jù)行移除之后,比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行為數(shù)據(jù)行L3~L9;將數(shù)據(jù)行R6及之前的數(shù)據(jù)行移除之后,被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行為數(shù)據(jù)行R7~R9。
步驟S310:判斷所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量是否小于預(yù)設(shè)的第一閾值;當(dāng)判斷結(jié)果為是時,可以執(zhí)行步驟S311;當(dāng)判斷結(jié)果為否時,則獲取所述比較文件下一位序的數(shù)據(jù)行,并從步驟S302開始執(zhí)行。
在具體實施中,在每次將對比較文件和被比較文件的當(dāng)前比較窗口內(nèi)的相應(yīng)的數(shù)據(jù)行移除之后,將會執(zhí)行一次判斷操作,以確定所述比較文件當(dāng)前比較窗口中數(shù)據(jù)行,或被比較文件當(dāng)前比較窗口中數(shù)據(jù)行的數(shù)量是否至少有一個小于預(yù)設(shè)的第一閾值,以確定是否需要為比較文件當(dāng)前比較窗口或者被比較文件當(dāng)前比較窗口中添加默認(rèn)載入行數(shù)的數(shù)據(jù)行。
步驟S311:判斷所述比較文件或被比較文件中的數(shù)據(jù)行是否全部遍歷完成:當(dāng)判斷結(jié)果為是時,可以結(jié)束比較文件和被比較文件之間的數(shù)據(jù)行比較操作;反之,則可以執(zhí)行步驟S312。
步驟S312:獲取所述比較文件中下一所述默認(rèn)載入行數(shù)的數(shù)據(jù)行并添加至所述比較文件中當(dāng)前比較窗口末尾,作為所述比較文件的當(dāng)前比較窗口,或者將所述比較文件的中下一默認(rèn)載入行數(shù)的數(shù)據(jù)行添加至所述被比較文件中當(dāng)前比較窗口末尾,作為所述被比較文件的當(dāng)前比較窗口,并從步驟S302開始執(zhí)行,直至所述比較文件或者被比較文件的所有數(shù)據(jù)行遍歷完成。
在具體實施中,當(dāng)確定所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量中至少一個小于預(yù)設(shè)的第一閾值時,便可以為剩余數(shù)據(jù)行的數(shù)量小于第一閾值的文件的比較窗口的末尾添加默認(rèn)載入行數(shù)的數(shù)據(jù)行,從而使得所述比較文件或被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行的數(shù)量大于或等于第一閾值,且小于第二閾值。
繼續(xù)參見圖6,當(dāng)?shù)谝婚撝禐?時,在將數(shù)據(jù)行L2及之前的數(shù)據(jù)行被移除之后,比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行為數(shù)據(jù)行L3~L9;將數(shù)據(jù)行R6及之前的數(shù)據(jù)行移除之后,被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行為數(shù)據(jù)行R7~R9。此時,比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行的數(shù)量為7,大于第一閾值4;被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行的數(shù)量為3,小于第一閾值4。因此,需要對被比較文件當(dāng)前比較窗口執(zhí)行添加默認(rèn)載入行數(shù)的數(shù)據(jù)行的操作,也即將被比較文件的剩余待比較數(shù)據(jù)行中前9個數(shù)據(jù)行,也即數(shù)據(jù)行R10~R18添加至被比較文件當(dāng)前比較窗口的末尾,即數(shù)據(jù)行R9之后。而對于比較文件的當(dāng)前比較窗口,則不需要執(zhí)行添加默認(rèn)載入行數(shù)的數(shù)據(jù)行的操作。
在具體實施中,當(dāng)確定比較文件或者被比較文件當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行的數(shù)量小于預(yù)設(shè)的第一閾值時,將從比較文件剩余待比較的數(shù)據(jù)行或者被比較文件剩余待比較的數(shù)據(jù)行中獲取默認(rèn)載入行數(shù)的數(shù)據(jù)行添加至比較文件或者被比較文件當(dāng)前比較窗口內(nèi)末尾。
參見圖7,當(dāng)比較文件的當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行L3至L9,被比較文件的當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行R7~R18時,可以接著獲取比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行L3分別與數(shù)據(jù)行R7~R18進(jìn)行比較,發(fā)現(xiàn)不存在與數(shù)據(jù)行L3相同的數(shù)據(jù)行,也不存在與數(shù)據(jù)行L4和L5相同的數(shù)據(jù)行。
接著,將數(shù)據(jù)行L6與數(shù)據(jù)行R7~R18進(jìn)行逐一比較,確定數(shù)據(jù)行L6與數(shù)據(jù)行R9相同,將數(shù)據(jù)行L6與數(shù)據(jù)行R9標(biāo)記為相同。同時,通過判斷確定比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行L6之前的數(shù)據(jù)行為3,而被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行R9之前的數(shù)據(jù)行為2,此時,需要在數(shù)據(jù)行R9之前添加一個空數(shù)據(jù)行,以使得數(shù)據(jù)行L6之前的數(shù)據(jù)行L3~L5分別與數(shù)據(jù)行R9之前的數(shù)據(jù)行R7、R8和空數(shù)據(jù)行一一對應(yīng)。之后,將比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行L6及之前的數(shù)據(jù)行進(jìn)行移除,并將被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行R9及之前的數(shù)據(jù)行執(zhí)行移除的操作。
在將數(shù)據(jù)行移除后,比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行為L7~L9,小于第一閾值4,因此在數(shù)據(jù)行L9之后添加9行數(shù)據(jù)行L10~L19;被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行為R10~R18,大于或等于第一閾值4,無需為被比較文件當(dāng)前比較窗口末尾添加默認(rèn)載入行數(shù)的數(shù)據(jù)行。
在將比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行更新為L7~L19,被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行更新為R10~R18之后,重新執(zhí)行將比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行與被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行進(jìn)行逐一比較的操作,并確定數(shù)據(jù)行L11與數(shù)據(jù)行R14相同。
參見圖8,由于比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行L11之前的數(shù)據(jù)行為L7~L10,與被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行R14之前的數(shù)據(jù)行為R10~R13的數(shù)量相同。因此,可以直接執(zhí)行將比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行L11及之前的數(shù)據(jù)行,以及被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行R14及之前的數(shù)據(jù)行直接移除的操作。
在執(zhí)行移除操作之后,比較文件當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行L12~L19,大于第一閾值4;被比較文件當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行R15~R18,等于第一閾值4,因而無需向比較文件當(dāng)前比較窗口內(nèi)和被比較文件當(dāng)前比較窗口內(nèi)分別執(zhí)行添加9行數(shù)據(jù)行的操作,也即將當(dāng)前比較文件當(dāng)前比較窗口更新為包括數(shù)據(jù)行L12~L19,將被比較文件當(dāng)前比較窗口更新為包括數(shù)據(jù)行R15~R18,并執(zhí)行將比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行與被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行進(jìn)行逐一比較的操作,即直接進(jìn)入比較文件當(dāng)前比較窗口內(nèi)L12與被比較文件當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行R15~R18進(jìn)行比較的操作,直至確定比較文件當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行L14與被比較文件當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行R18相同。
參見圖9,因比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行L14之前的數(shù)據(jù)行為L12和L13,被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行R18之前的數(shù)據(jù)行為R15~R17,也即二者之前的數(shù)據(jù)行的數(shù)量不相同。此時,需要在數(shù)據(jù)行L14之前添加一個空數(shù)據(jù)行,以使得比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行L14之前的數(shù)據(jù)行的數(shù)量為3,與被比較文件當(dāng)前比較窗口內(nèi)包括數(shù)據(jù)行R18之前的數(shù)據(jù)行的數(shù)量相同,以便一一對應(yīng)。
接著,將比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行L14及之前的數(shù)據(jù)行,以及被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行R18及之前的數(shù)據(jù)行分別進(jìn)行移除。此時,比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行為L15~L19,被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行為空,但因比較文件和被比較文件均已經(jīng)遍歷完畢,也即比較文件的數(shù)據(jù)行到L19結(jié)束,被比較文件的數(shù)據(jù)行到R18結(jié)束,此時,由于比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行為L15~L19,被比較文件當(dāng)前比較窗口內(nèi)數(shù)據(jù)行為空,可以直接在被比較文件當(dāng)前比較窗口內(nèi)添加與數(shù)據(jù)行L15~L19一一對應(yīng)的空數(shù)據(jù)行即可,并結(jié)束本次的文件比較操作。
這里需要指出的是,圖2至圖9所示的行間比較方法除了可以應(yīng)用于經(jīng)過替換內(nèi)容替換后得到的比較文件和被比較文件中的數(shù)據(jù)行之間的比較外,可以應(yīng)用于任意兩個文件的比較,以提高文件比較的效率和準(zhǔn)確性,本發(fā)明在此不做限制。
在具體實施中,當(dāng)通過前述的方法確定比較文件和被比較文件的數(shù)據(jù)行之間的相同與不同時,便可以對標(biāo)記為不同的數(shù)據(jù)行執(zhí)行行內(nèi)比較,以確定不同的數(shù)據(jù)行之間具體的差異所在。
參見圖10,本發(fā)明實施中的對不同的數(shù)據(jù)行執(zhí)行行內(nèi)比較的方法,可以包括如下的步驟:
步驟S1001:判斷待比較的數(shù)據(jù)行是否均為非空數(shù)據(jù)行;當(dāng)判斷結(jié)果為是時,可以執(zhí)行步驟S1002反之,則可以執(zhí)行步驟S1003。
在具體實施中,可以將比較的數(shù)據(jù)行中,其中一個稱為比較行,另外一個稱為被比較行。
在本發(fā)明一實施例中,通過前述的描述可知,待在執(zhí)行行間比較時,當(dāng)比較文件和被比較文件中的數(shù)據(jù)行相同,但是位序不同時,會通過添加對應(yīng)的數(shù)據(jù)行的方式,使得比較文件與被比較文件的數(shù)據(jù)行一一對應(yīng)。因此,不同的數(shù)據(jù)行中的兩個不同的數(shù)據(jù)行中,可能存在一者為空數(shù)據(jù)行的情形。因此,可以首先判斷所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行是否均為非空數(shù)據(jù)行,以確定是否需要執(zhí)行后續(xù)的行內(nèi)比較。
步驟S1002:對所述比較行和被比較行執(zhí)行行內(nèi)比較。
在具體實施中,當(dāng)不同的數(shù)據(jù)行中的兩個不同的數(shù)據(jù)行均不為空數(shù)據(jù)行時,也即均為非空數(shù)據(jù)行時,可以對所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行執(zhí)行行內(nèi)比較,以確定而二者的具體差異所在。
步驟S1003:將所述比較行和被比較行中的非空數(shù)據(jù)行直接標(biāo)記為不同。
在具體實施中,當(dāng)不同的數(shù)據(jù)行中的兩個不同的數(shù)據(jù)行中一者為空數(shù)據(jù)行時,對應(yīng)的非空數(shù)據(jù)行整體即為二者之間的差異。此時,可以將二者中的非空數(shù)據(jù)行直接標(biāo)記為差異部分即可。
在具體實施中,當(dāng)確定所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行均為非空數(shù)據(jù)行時,可以將所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行中一個作為比較行,另一個作為被比較行,所述對所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行執(zhí)行行內(nèi)比較的方法,參照圖11,可以采用如下的操作進(jìn)行:
步驟S1101:分別對所述比較行和被比較行的字符從尾至頭進(jìn)行遍歷并比較,直至所述比較行與所述被比較行中相應(yīng)位序的字符不同。
在具體實施中,為了提高數(shù)據(jù)行之間的字符的比較效率,可以首先從尾至頭遍歷比較行與被比較行中的字符,直至找到字符不同的位置,以提前將尾部相同的字符從比較行列中排除,以減少比較的字符數(shù),以提高比較的效率。
參見圖12,當(dāng)比較行包括字符A1~A12,被比較行包括字符B1~B13時,首先按照從尾至頭的順序,分別遍歷比較行和被比較行中對應(yīng)的字符,也即按照字符A12~A1,字符B13~B1的順序,分別比較相應(yīng)位序的字符是否相同。
步驟S1102:將通過從尾至頭遍歷得到的所比較文件和所述被比較文件中相應(yīng)位序的字符之后的字符標(biāo)記為相同并分別從所述比較行和所述被比較行中移除。
在具體實施中,當(dāng)通過從尾至頭遍歷并比較確定比較行與被比較行中對應(yīng)位序的字符相同時,可以將對應(yīng)位序的字符分別從比較行與被比較行中移除。
繼續(xù)參見圖12,比較行包括字符A1~A12,被比較行包括字符B1~B13。首先,將字符A12與B13比較,確定二者相同;接著,將字符A11與B12進(jìn)行比較,確定二者也相同;隨后,將字符A10與B11進(jìn)行比較,確定二者也不同。此時,可以將字符A11和A12分別從比較行中移除,比較行的剩余字符為A1~A10;將字符B12和B13分別從被比較行中移除,被比較行的剩余字符為B1~B11。
步驟S1103:將所述比較行與所述被比較行中的剩余字符從頭至尾進(jìn)行比較,得到對應(yīng)的比較結(jié)果。
在具體實施中,當(dāng)將從尾至頭遍歷得到的相應(yīng)位序的相同的字符進(jìn)行移除之后,可以將比較行與被比較行中剩余的字符從頭至尾進(jìn)行遍歷并比較,以確定比較行與被比較行中存在差異的字符。
繼續(xù)參見圖12,在將字符A11和A12,以及字符B12和B13分別從比較行和被比較行中移除之后,可以將比較行的剩余字符A1~A10分別與被比較行的剩余字符B1~B11從頭至尾進(jìn)行比較。
參見圖13,本發(fā)明實施例中的一種在將所述比較行與所述被比較行中的剩余字符從頭至尾進(jìn)行比較的方法,可以通過如下的步驟實現(xiàn):
步驟S1301:從頭至尾遍歷所述比較行的剩余字符。
在具體實施中,當(dāng)確定比較行和被比較行的剩余字符時,可以首先按照從頭至尾的順序獲取比較行的剩余字符中的當(dāng)前位序的字符。步驟S1302:將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較。
在具體實施中,當(dāng)按照從頭至尾的順序,將遍歷至的比較行的剩余字符中當(dāng)前位序的字符,分別與所述被比較行中的剩余字符進(jìn)行一一比較,以確定所述被比較行中的剩余字符中是否存在與比較行的剩余字符中當(dāng)前位序的字符相同的字符。
參見圖14,按照從頭至尾的順序,首先獲取比較行中的字符A1,并分別與被比較行中剩余字符B1~B11逐一進(jìn)行比較,以確定被比較行中剩余字符B1~B11中是否存在與字符A1相同的字符。
步驟S1302:將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較。
步驟S1303:判斷所述被比較行的剩余字符中是否存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符;當(dāng)判斷結(jié)果為是時,可以執(zhí)行步驟S1305;反之,則可以執(zhí)行步驟S1304。
步驟S1304:獲取比較行的剩余字符中下一位序字符,并從步驟S1302開始執(zhí)行。
在具體實施中,當(dāng)通過比較確定被比較行的剩余字符中不存在與遍歷至的比較行的剩余字符中當(dāng)前位序的字符相同的字符時,則獲取比較行的剩余字符中當(dāng)前位序之后的下一位序的字符,并從步驟S1302開始執(zhí)行,直至比較行的剩余字符遍歷完畢。
步驟S1305:將所述比較行的剩余字符中當(dāng)前位序的字符與所述被比較行的剩余字符中目標(biāo)位序的字符標(biāo)記為相同。
在具體實施中,當(dāng)所述被比較行的剩余字符中存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符時,將所述比較行的剩余字符中當(dāng)前位序的字符與所述被比較行的剩余字符中目標(biāo)位序的字符標(biāo)記為相同的字符。繼續(xù)參見圖14,當(dāng)通過比較確定字符A1與字符B1相同時,可以將字符A1與字符B1標(biāo)記為相同。
步驟S1306:將所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符,分別作為所述比較行的剩余字符和所述被比較行的剩余字符,并從步驟S1302重新開始執(zhí)行,以找到其他的相同字符并記錄,直至所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符全部遍歷完成。
在具體實施中,當(dāng)確定被比較行的剩余字符中存在與比較行的剩余字符中當(dāng)前位序的字符相同的字符時,將被比較行中對應(yīng)的字符作為目標(biāo)位序的字符。同時,將所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符,分別作為所述比較行的剩余字符和所述被比較行的剩余字符,并從步驟S1302重新開始執(zhí)行,以從所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符查找其他相同的字符并記錄。
繼續(xù)參見圖14,當(dāng)確定字符A1與字符B1相同時,將比較行的剩余字符中的字符A2至A10重新作為比較行的剩余字符,并將被比較行的剩余字符B2至B11分別作為被比較行的剩余字符,并執(zhí)行從頭至尾遍歷進(jìn)行比較,也即從步驟S1301重新開始執(zhí)行,首先將字符A2分別與字符B2至B11進(jìn)行比較,并找到字符B9與字符A2相同。接著,將字符A2與字符A9之間的字符,也即字符A3至A8,作為比較行的剩余字符;將字符B2至B9之間的字符,也即字符B3至B8,作為被比較行的剩余字符,并從步驟S1301重新開始執(zhí)行,找到字符A4與字符B7相同并記錄。
參見圖15,當(dāng)找到字符A4與字符B7相同時,將字符A4至A7之間的字符,也即字符A5和A6作為比較行的剩余字符,并將字符B4至B7之間的字符,即字符B5和B6作為被比較行的剩余字符,并從S1301重新開始執(zhí)行,確定字符A5和A6與字符B5和B6均不相同,也即字符A4與字符B7為最后一次找到的比較行和所述被比較行的剩余字符中相同字符。
步驟S1307:獲取最后一次記錄的相同字符的信息,并將對應(yīng)的比較行中的字符記為第一相同位序的字符,對應(yīng)的被比較行中的字符記為第二相同位序的字符。
在具體實施中,為了便于描述,將最后一次記錄的相同字符中,比較行中的對應(yīng)的字符記為第一相同位序的字符,將被比較行中對應(yīng)的的字符記為第二相同位序的字符。
繼續(xù)參見圖16,當(dāng)確定最后一次記錄的相同字符分別字符A4與字符B7時,將字符A4作為第一相同位序的字符,將字符B7作為第二相同位序的字符。
步驟S1308:將所述比較行的剩余字符中所述第一相同位序之后的字符作為所述比較行的剩余字符,將所述被比較行的剩余字符中所述第二相同位序之后的字符作為所述被比較行的剩余字符,并從S1302重新開始執(zhí)行,以找到所述比較行的剩余字符中所述第一相同位序之后的字符中與所述被比較行的剩余字符中所述第二相同位序之后的字符中相同的字符并記錄,直至所述比較行中所述第一相同位序之后的字符或者所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符遍歷完成。
在具體實施中,當(dāng)確定最后一次記錄的相同字符的信息時,可以將所述比較行的剩余字符中所述第一相同位序之后的字符作為所述比較行的剩余字符,將所述被比較行的剩余字符中所述第二相同位序之后的字符作為所述被比較行的剩余字符,并重新執(zhí)行所述從頭至尾進(jìn)行比較的操作,以在找到所述比較行的剩余字符中所述第一相同位序之后的字符,和被比較行的剩余字符中所述第二相同位序之后的字符中確定是否存在相同的字符,直至所述比較行中所述第一相同位序之后的字符或者所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符遍歷完成。
繼續(xù)參見圖17,當(dāng)確定最后一次記錄的相同字符分別字符A4與字符B7時,將比較行的剩余字符A4之后的字符,也即字符A5至A10作為比較行的剩余字符,并將被比較行的剩余字符中B7之后的字符,也即字符B8至B11作為被比較行的剩余字符,重新執(zhí)行從頭至尾遍歷進(jìn)行比較的操作,從字符A5開始,找到字符B8與之相同。
接著,進(jìn)一步更新比較行和被比較行的剩余字符中的字符,也即將字符A6至A10作為比較行的剩余字符,并將字符B9至B11作為被比較行的剩余字符,并重新執(zhí)行從頭至尾遍歷進(jìn)行比較的操作,從字符A6,找到字符B11與字符A6相同。
參見圖18,由于字符B11為被比較行的剩余字符中的最后一個字符,因此,比較行與被比較行的本次比較結(jié)束。同時,因比較行中還剩余字符A7至字符A10,可以直接將剩余字符A7至字符A10直接記錄為比較行與被比較行中差異部分。
這里需要強調(diào)的是,圖10至圖18所示的行內(nèi)比較方法可以應(yīng)用于任意數(shù)據(jù)行中的數(shù)據(jù)的比較,以提高數(shù)據(jù)比較的效率和準(zhǔn)確性,本發(fā)明在此不做限制。
上述對本發(fā)明實施例中的方法進(jìn)行了詳細(xì)的描述,下面將對上述的方法對應(yīng)的裝置進(jìn)行介紹。
圖19示出了本發(fā)明實施例中的一種文件比較裝置的結(jié)構(gòu)。參見圖19,本發(fā)明實施例中的一種文件比較裝置190,可以包括替換單元191、行間比較單元192和行內(nèi)比較單元193,其中:
替換單元191,適于將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換;
行間比較單元192,適于對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較,得到一一對應(yīng)不同的數(shù)據(jù)行;
行內(nèi)比較單元193,適于對所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行執(zhí)行行內(nèi)比較。
在本發(fā)明一實施例中,所述替換單元191,適于當(dāng)所述比較文件和被比較文件為文本文件或者表數(shù)據(jù)逗號分隔值文件時,將所述比較文件和被比較文件中相應(yīng)數(shù)據(jù)列的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。
在本發(fā)明一實施例中,所述替換單元191,適于當(dāng)所述比較文件和被比較文件為二進(jìn)制文件時,將所述比較文件和被比較文件中的相應(yīng)字節(jié)的內(nèi)容采用所述替換內(nèi)容進(jìn)行替換。
在本發(fā)明一實施例中,所述行間比較單元192,包括第一獲取子單元(未示出)和第一比較子單元(未示出);所述第一獲取子單元,適于獲取預(yù)配置的默認(rèn)載入行數(shù)的信息;所述默認(rèn)載入行數(shù)包括預(yù)設(shè)數(shù)量的比較行數(shù)的信息;所述第一比較子單元,適于基于預(yù)配置的默認(rèn)載入行數(shù)的信息,對所述比較文件和被比較文件執(zhí)行行間比較。
在本發(fā)明一實施例中,所述第一比較子單元,包括第一獲取模塊(未示出)和第一比較模塊(未示出);所述第一獲取模塊,適于分別獲取所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行;所述當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行大于預(yù)設(shè)的第一閾值且小于預(yù)設(shè)的第二閾值,所述第一閾值小于所述默認(rèn)載入行數(shù),所述第二閾值大于所述默認(rèn)載入行數(shù);所述第一比較模塊,適于將所述比較文件與所述被比較文件的當(dāng)前比較窗口中的數(shù)據(jù)行進(jìn)行比較。
在本發(fā)明一實施例中,所述第一比較模塊,包括第一遍歷子模塊(未示出)和第一比較子模塊(未示出),其中:
第一遍歷子模塊,適于對所述比較文件的當(dāng)前比較窗口中數(shù)據(jù)行進(jìn)行遍歷,獲取所述比較文件的當(dāng)前比較窗口中當(dāng)前位序的數(shù)據(jù)行,并與所述被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行逐一進(jìn)行比較;
第一比較子模塊,適于當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)未查找到與所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行相同數(shù)據(jù)行時,獲取所述比較文件的當(dāng)前比較窗口內(nèi)的下一位序的數(shù)據(jù)行,并執(zhí)行所述與所述被比較文件的當(dāng)前比較窗口內(nèi)的數(shù)據(jù)行逐一進(jìn)行比較的操作。
在本發(fā)明一實施例中,所述第一比較模塊,還包括第一標(biāo)記子模塊(未示出)、第一判斷子模塊(未示出)、第一移除子模塊(未示出)和第一添加子模塊(未示出),其中:
第一標(biāo)記子模塊,適于當(dāng)從所述被比較文件當(dāng)前比較窗口內(nèi)查找到與所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行相同的目標(biāo)位序的數(shù)據(jù)行時,將所述比較文件當(dāng)前比較窗口內(nèi)的當(dāng)前位序的數(shù)據(jù)行與所述被比較文件當(dāng)前比較窗口內(nèi)的目標(biāo)位序的數(shù)據(jù)行標(biāo)記為相同;
第一判斷子模塊,適于判斷所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量是否相同;
第一移除子模塊,適于當(dāng)確定所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量相同時,分別將當(dāng)前比較窗口內(nèi)所述前位序及之前的數(shù)據(jù)行,與所述被比較文件的當(dāng)前比較窗口內(nèi)所述目標(biāo)位序及之前的數(shù)據(jù)行移除;
第一添加子模塊,適于當(dāng)確定所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行的數(shù)量不同時,為數(shù)據(jù)行數(shù)量較少的所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序與上一位序之間或者所述被比較文件的當(dāng)前比較窗口內(nèi)目標(biāo)位序與上一位序之間添加對應(yīng)數(shù)量的空數(shù)據(jù)行,以使得所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行一一對應(yīng);
所述第一移除子模塊,還適于當(dāng)所述比較文件當(dāng)前比較窗口內(nèi)當(dāng)前位序之前的數(shù)據(jù)行與所述被比較文件的當(dāng)前比較窗口內(nèi)的目標(biāo)位序之前的數(shù)據(jù)行一一對應(yīng)時,將所述比較文件中當(dāng)前比較窗口內(nèi)當(dāng)前位序及之前的數(shù)據(jù)行,以及所述被比較文件中目標(biāo)位序的數(shù)據(jù)行及之前的數(shù)據(jù)行移除。
在具體實施中,所述第一比較模塊還可以包括第二判斷子模塊(未示出)和第二添加子模塊(未示出),其中:
第二判斷子模塊,適于在所述比較文件或者被比較文件的當(dāng)前比較窗口移除相應(yīng)的數(shù)據(jù)行之后,判斷所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量是否小于預(yù)設(shè)的第一閾值;
第二添加子模塊,適于當(dāng)確定所述比較文件或被比較文件當(dāng)前比較窗口中剩余數(shù)據(jù)行的數(shù)量小于所述第一閾值時,獲取所述比較文件中下一所述默認(rèn)載入行數(shù)的數(shù)據(jù)行并添加至所述比較文件中當(dāng)前比較窗口末尾,作為所述比較文件的當(dāng)前比較窗口,或者將所述比較文件的中下一默認(rèn)載入行數(shù)的數(shù)據(jù)行添加至所述被比較文件中當(dāng)前比較窗口末尾,作為所述被比較文件的當(dāng)前比較窗口,直至所述比較文件或者被比較文件的所有數(shù)據(jù)行遍歷完成。
在具體實施中,所述行內(nèi)比較單元193可以包括第三判斷子單元(未示出)和行內(nèi)比較子單元(未示出),其中:
第三判斷子單元,適于判斷所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行是否均為非空數(shù)據(jù)行;
行內(nèi)比較子單元,適于當(dāng)確定所述比較文件和被比較文件中一一對應(yīng)的不同數(shù)據(jù)行均為非空數(shù)據(jù)行時,對所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行執(zhí)行行內(nèi)比較。
在具體實施中將所述比較文件和被比較文件中一一對應(yīng)的非空數(shù)據(jù)行中一個作為比較行,另一個作為被比較行,所述行內(nèi)比較子單元可以包括移除模塊(未示出)和第二比較模塊(未示出),其中:
移除模塊,適于分別對所述比較行和被比較行的字符從尾至頭進(jìn)行遍歷并比較,直至所述比較行與所述被比較行中相應(yīng)位序的字符不同;將通過從尾至頭遍歷得到的所比較文件和所述被比較文件中相應(yīng)位序的字符之后的字符標(biāo)記為相同并分別從所述比較行和所述被比較行中移除;
第二比較模塊,將所述比較行與所述被比較行中剩余的字符從頭至尾進(jìn)行比較,得到對應(yīng)的比較結(jié)果。
在具體實施中,所述第二比較模塊可以包括第一遍歷子模塊(未示出)和第二比較子模塊(未示出),其中:
第一遍歷子模塊,適于從頭至尾遍歷所述比較行的剩余字符;
第二比較子模塊,將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較;當(dāng)確定所述被比較行的剩余字符中不存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符時,獲取比較行的剩余字符中下一位序字符,并從所述將遍歷至的所述比較行的剩余字符中的當(dāng)前位序的字符與所述被比較行中的剩余字符逐一進(jìn)行比較開始執(zhí)行,直至所述比較行的剩余字符遍歷完畢。
在具體實施中,所述第二比較模塊還可以包括第二標(biāo)記子模塊(未示出)、第一更新子模塊(未示出)、第三比較子模塊(未示出)、獲取子模塊(未示出)和第二更新子模塊(未示出)、第四比較子模塊(未示出),其中:
第二標(biāo)記子模塊,適于當(dāng)確定所述被比較行的剩余字符中存在與所述遍歷至的比較行的剩余字符中的當(dāng)前位序的字符相同的目標(biāo)位序的字符時,將所述比較行的剩余字符中當(dāng)前位序的字符與所述被比較行的剩余字符中目標(biāo)位序的字符標(biāo)記為相同;
第一更新子模塊,適于將所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符,分別作為所述比較行的剩余字符和所述被比較行的剩余字符;
第三比較子模塊,適于從所述從頭至尾遍歷所述比較行的剩余字符開始執(zhí)行,以找到其他的相同字符并記錄,直至所述比較行和所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符全部遍歷完成;
獲取子模塊,適于獲取最后一次記錄的相同字符的信息,并將對應(yīng)的比較行中的字符記為第一相同位序的字符,對應(yīng)的被比較行中的字符記為第二相同位序的字符;
第二更新子模塊,適于將所述比較行的剩余字符中所述第一相同位序之后的字符作為所述比較行的剩余字符,將所述被比較行的剩余字符中所述第二相同位序之后的字符作為所述被比較行的剩余字符;
第四比較子模塊,適于從所述從頭至尾遍歷所述比較行的剩余字符開始執(zhí)行,以找到所述比較行的剩余字符中所述第一相同位序之后的字符中與所述被比較行的剩余字符中所述第二相同位序之后的字符中相同的字符并記錄,直至所述比較行中所述第一相同位序之后的字符或者所述被比較行的剩余字符中當(dāng)前位序至所述目標(biāo)位序的字符遍歷完成。
在具體實施中,為了提高文件比較結(jié)果輸出的靈活性,所述文件比較裝置還可以包括輸出單元194,其中:
輸出單元194,適于按照預(yù)設(shè)的報表格式生成對應(yīng)的比較報告并輸出。
采用本發(fā)明實施例中的上述方案,通過將比較文件和被比較文件中的相應(yīng)數(shù)據(jù)采用自定義的替換內(nèi)容進(jìn)行替換,并對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較和行內(nèi)比較,可以將比較文件和被比較文件中無需進(jìn)行比較的內(nèi)容從比較內(nèi)容中進(jìn)行移除,可以有效減少比較數(shù)據(jù)的數(shù)量,從而可以提高文件比較的效率。
進(jìn)一步地,在對經(jīng)過替換后得到的比較文件和被比較文件執(zhí)行行間比較時,采用浮動窗口大小將比較文件和被比較文件的比較內(nèi)容限定在預(yù)設(shè)的數(shù)量范圍內(nèi),可以避免由于比較內(nèi)容較大所導(dǎo)致的比較失敗,從而可以提高文件比較的可靠性。
進(jìn)一步地,在執(zhí)行不同非空數(shù)據(jù)行之間的行內(nèi)比較時,首先從尾至頭分別對比較行和被比較行進(jìn)行遍歷,直至所述比較行與所述被比較行中相應(yīng)位序的字符不同,并將比較行和被比較行中處于從尾至頭遍歷至的相同位序且相同的字符從比較窗口中移除,以減少比較內(nèi)容,從而可以行內(nèi)比較的效率,進(jìn)而可以提高文件比較的效率。
進(jìn)一步地,在對所述比較行和被比較行的剩余字符進(jìn)行比較,且確定所述比較行的剩余字符中第一位序的字符與被比較行的剩余字符中第二位序的字符相同時,將所述比較行的剩余字符中第一位序的字符與被比較行的剩余字符中第二位序的字符記錄為相同位置,并將所述比較行和被比較行的剩余字符中第一位序至所述第二位序之間分別作為剩余字符繼續(xù)尋找相同的字符,通過不斷縮小比較窗口內(nèi)的字符的數(shù)量,可以準(zhǔn)確地定位所述比較行與所述被比較行中的不同位置,可以進(jìn)一步提高數(shù)據(jù)行行內(nèi)字符比較的準(zhǔn)確性,進(jìn)而可以進(jìn)一步提高文件比較的準(zhǔn)確性。
本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于計算機(jī)可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:ROM、RAM、磁盤或光盤等。
以上對本發(fā)明實施例的方法及系統(tǒng)做了詳細(xì)的介紹,本發(fā)明并不限于此。任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與修改,因此本發(fā)明的保護(hù)范圍應(yīng)當(dāng)以權(quán)利要求所限定的范圍為準(zhǔn)。