作者在 2025-08-13 17:59:30 发布以下内容
比对结果说明:(见插图-插图中有VB代码)
1 左边带行号的行:是新文本的行,行号与新文本一致。(立足“新文本”)
其中,行号右边不带“!>”的行,是原有的行【1】;带“!>”的行,是新增加的行【2】。
2 左边无行号的行:是修改后已经删除的行,行右端的数字是它在旧文本中的行号【3】。
思路分析:(参见代码)
从2个文本的第1行开始,寻找两类行:一类是‘文本差异的起始行’QS()---If……Then;另一类是‘两个文本的公共子串’ Else。
如果找到‘后一类’【1】,则比较好办:给它加上‘行号’,然后两个行号(pn1和pn2)都加1。
如果找到‘前一类’,则要分清是‘删除’还是‘插入’。(‘更改’其实是‘插入’和‘删除’的共同效果)
这是根据 CD (连续的差异行数)是否 大于零 来判断的:旧文本 CD(0,mn)>0 有‘删除’;新文本 CD(1,mn)>0 有‘插入’。
是‘插入’好办:加上行号和“!>”就可以了【2】。
★如果是‘删除’【3】,那就麻烦了:
把旧文本的这1行的内容 【A(QS(0, mn) + i)】 接上 【Ls】 ("*") ,接上旧文本的行号【QS(0, mn) + i】之后★★、再送入到★新文本的‘上一行’内容【B(pn2 - 1)】后面去。 也就是,★★新文本的这一行的内容(数组变量B()的元素),实际包含了★★旧文本中的行。
这样,比对结果文本实际包含了新、旧 2个文本的全部的行!
怎样取得文本比对的“差异数据”(QS、CD),请参阅我 2025-03-01 14:07 在本站的博文“文本比对程序设计--按“求同存异”来梳理文本;用“反转的文本”为“状态数组”充值”。
1 左边带行号的行:是新文本的行,行号与新文本一致。(立足“新文本”)
其中,行号右边不带“!>”的行,是原有的行【1】;带“!>”的行,是新增加的行【2】。
2 左边无行号的行:是修改后已经删除的行,行右端的数字是它在旧文本中的行号【3】。
思路分析:(参见代码)
从2个文本的第1行开始,寻找两类行:一类是‘文本差异的起始行’QS()---If……Then;另一类是‘两个文本的公共子串’ Else。
如果找到‘后一类’【1】,则比较好办:给它加上‘行号’,然后两个行号(pn1和pn2)都加1。
如果找到‘前一类’,则要分清是‘删除’还是‘插入’。(‘更改’其实是‘插入’和‘删除’的共同效果)
这是根据 CD (连续的差异行数)是否 大于零 来判断的:旧文本 CD(0,mn)>0 有‘删除’;新文本 CD(1,mn)>0 有‘插入’。
是‘插入’好办:加上行号和“!>”就可以了【2】。
★如果是‘删除’【3】,那就麻烦了:
把旧文本的这1行的内容 【A(QS(0, mn) + i)】 接上 【Ls】 ("*") ,接上旧文本的行号【QS(0, mn) + i】之后★★、再送入到★新文本的‘上一行’内容【B(pn2 - 1)】后面去。 也就是,★★新文本的这一行的内容(数组变量B()的元素),实际包含了★★旧文本中的行。
这样,比对结果文本实际包含了新、旧 2个文本的全部的行!
怎样取得文本比对的“差异数据”(QS、CD),请参阅我 2025-03-01 14:07 在本站的博文“文本比对程序设计--按“求同存异”来梳理文本;用“反转的文本”为“状态数组”充值”。