<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>nhjsjjs的博客</title>
    <link>https://blog.bccn.net/nhjsjjs</link>
    <description>nhjsjjs的博客 的最新20篇文章</description>
    <copyright>Copyright(C) BCCN.NET</copyright>
    <lastBuildDate>2025-08-14 11:49:51 +0800</lastBuildDate>
    <item>
      <title>利用“差异数据”(QS、CD),立足“新文本”来展示比对结果（按行比对）</title>
      <link>https://blog.bccn.net/nhjsjjs/68509</link>
      <description>比对结果说明：（见插图-插图中有VB代码）
1 左边带行号的行：是新文本的行，行号与新文本一致。（立足“新文本”）
&amp;nbsp; &amp;nbsp; 其中，行号右边不带“!&amp;gt;”的行，是原有的行【1】；带“!&amp;gt;”的行，是新增加的行【2】。
2 左边无行号的行：是修改后已经删除的行，行右端的数字是它在旧文本中的行号【3】。

	
思路分析：（参见代码）（旧文本的每1行，放入数组 A(pn1）;新文本的每1行，放入数组 B(pn2）。&amp;nbsp; ）

&amp;nbsp; &amp;nbsp; 文本比对后，根据实际文本的内容，2个文本的第1行的关系，只存在两种可能。
第一种是，两个文...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2025-08-14 11:49:51 +0800</pubDate>
    </item>
    <item>
      <title>VB6--文本比对程序自动向“已经设置好格式”的 Excel 文档输出数据</title>
      <link>https://blog.bccn.net/nhjsjjs/68490</link>
      <description>&amp;nbsp; &amp;nbsp; 用VB语言编写“文本对照程序”，在解决了“比对算法”问题之后，怎样让用户能方便地观察对照结果，就成了要重点解决的问题。也就是“给特殊的行设置底纹”和“左右两边同步滚动”。
&amp;nbsp; &amp;nbsp; 我想，如果能够把对照结果自动输入到“已经设置好[列宽]、[底纹格式]”的Excel 表格中，这两个问题就都能解决了。
&amp;nbsp; &amp;nbsp; 我上传的“VB-xlsx.rar”压缩包里有程序“VB-Excel.exe”、“bj.xlsx”文档和代码文本“对照程序VB代码.txt”（代码文本有简单的解释）。(附：安装与注册CMDLGOCX.exe）。如有兴趣...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2025-04-13 18:14:49 +0800</pubDate>
    </item>
    <item>
      <title>文本比对程序设计（按行）中的同步滚动问题--“瞬间限高”方法</title>
      <link>https://blog.bccn.net/nhjsjjs/68489</link>
      <description>



&amp;nbsp; &amp;nbsp; 左右两个文本框中的文件，它们的行数不一定是一样的。但是比对后，为了方便用户的观察和分析研究，程序会在两边适当的位置插入一些“斜纹行”。这样一来，两边的行数就一样了。只要有1行两边对齐了，整个文本就左右对齐了。
但是，因为2个文本框是相互独立的，用户的操作很容易造成两边“错位”。怎样才能让用户很方便地“对齐文本”并“同步滚动”呢？我采用的方法是“瞬间限高”。具体的说明如下：
&amp;nbsp; &amp;nbsp; 先把操作方法说明一下：不管当前的窗口是否已经对齐，只要用鼠标选中某一行中的几个字，就可以让两个文本的内容“对齐并同步滚动”。
注意：（两边）...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2025-04-06 16:21:28 +0800</pubDate>
    </item>
    <item>
      <title>文本比对程序设计--按“求同存异”来梳理文本;用“反转的文本”为“状态数组”充值</title>
      <link>https://blog.bccn.net/nhjsjjs/68484</link>
      <description>




从图1——图3 的程序运行结果的界面中，我们可以看到程序把左右两个文本中的所有的行（文章形式的文本是“字”，下同）都分成了2类：一类行不做任何修饰、文字颜色保持了原来的黑色。为了描述起来简洁一点，我简称是“YES”（相同的行）。
另一类行则是加上了颜色底纹，或文字加上了颜色、下划线，或行首加上了标记“@”等等，我简称是“NO”。
两个文本的“相同行”之间的关系，可以看作是2个文本的“最长公共子序列”（以“行”为单位）。
从程序结果的界面中，我们可以看出，只要我们获取了差异的具体信息，即2边文本的每一次差异的“起始行号”（QS）和连续的差异“行数”（CD），就可以...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2025-03-01 14:07:59 +0800</pubDate>
    </item>
    <item>
      <title>VB程序设计——文本修改前后对照（程序与源文件）</title>
      <link>https://blog.bccn.net/nhjsjjs/68324</link>
      <description>“文本比对程序”可以用来观察、对照2个文本之间的差异——【展示差异】。比如“文本修改前后对照”、“样张与打字文本的对照”等等。程序先要“搜索差异”、“储存差异”才能“展示差异”。
主程序是CmdMore ，用于“搜索差异”和“储存差异”
&amp;nbsp; &amp;nbsp; 它跟递归函数LCS()的结构很像，只是增加了关于 QS()、CD() 的2个数组。为什么要用这2个数组呢？因为，我们要想“展示差异”，就需要【知道】各个差异的“位置”（起始位置QS）和各个差异的“长度”（CD）。这样，当程序在上下两边的“原文档”里自动选中了“差异字符串”时，就会非常醒目。
（这个部分的设计思路、流程图等...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2023-06-21 12:05:09 +0800</pubDate>
    </item>
    <item>
      <title>再说说“从公共子串的角度求解最长公共子序列”。            在主程序里加几行代码，一并求出“最长公共子串”（附程序、VB源文件和实验文件）</title>
      <link>https://blog.bccn.net/nhjsjjs/68308</link>
      <description>程序是把2个字符串中的1个（我用下行txt2）从左到右逐个判断“留”或“去”，从而最终求得“最长公共子序列”的。而要求得“最长公共子串”，解题的思路是：★在每个公共子串结束时，测量该公共子串的长度，将其与储存的“最大值”比较……这是最常用的求最大值的方法，这里不赘述了，可以看代码。关键是,什么叫做“公共子串结束时”？
为此，设置1个Boolean 数据类型的变量：Righ，用以记录“上一个字符的判断结果”（也就是当前的★状态）：如果它是“留下”的（①或③1），就记录 Righ = True 状态，（当然同时要累加公共子串的字数）；如果它是“不留”的（②或③2），就记录 Righ = F...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2023-04-04 21:18:37 +0800</pubDate>
    </item>
    <item>
      <title>再说说“LCS”的算法-----分析我的博文（2022-12-09）插图上部的那条【绿色横线】区域</title>
      <link>https://blog.bccn.net/nhjsjjs/68292</link>
      <description>前一个公共子串结束后，上下两个字（位置是n1和n2）不相同,并且在n1的右面找到了与n2相同的字（图一中的“罗”--“罗”）。（插图二）里“上部的那条绿色横线”就表示：从n1(含n1）到“罗”之前(n1+r-1)（不含“罗”）的那个区域。这是一个关键区域。
我是这样分析的：如果下面的“罗”字因为不符合“最长”的缘故而不保留的话，那么在txt1（上面的字符串）里，★“最优的公共子串首字”一定在那个区域内（英白）！（因为，如果2个字都在“罗”的★右面（红色横线里），怎么可能比‘罗--罗’更长呢？）
于是，通过双重（For）循环和调用函数必然可以在“两条绿色横线”内找到“最优的公共子串首字...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2023-02-07 16:18:38 +0800</pubDate>
    </item>
    <item>
      <title>为什么求解“最长公共子序列”（LCS）需要递归函数？——从“公共子串”的角度来分析问题(附程序和VB源文件）</title>
      <link>https://blog.bccn.net/nhjsjjs/68262</link>
      <description>&amp;nbsp; &amp;nbsp; 我们知道：公共子序列是由一个个公共子串顺序连接而成的。为了求“最长公共子序列”，可以把字符串中的字分成2类：一类是要留下的（组成公共子串），另一类是要出列的。我们可以编程，把字符串（我取下面一行，txt2）从头到尾逐字鉴定该留还是该出列。
别看字符串五花八门、长长短短，鉴定起来却只有4种情况。而且并不是每一种都需要调用递归函数的。
我在【图一】中的每个公共子串的右面画一根蓝色竖线，表示原公共子串结束，新公共子串开始。
（下面所说的“情况一、情况二”，都可以用我们熟悉的、简单的编程语句来完成的。）
情况一：看第1个字“他”，上下2个字一样，“他”就留下，...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2022-12-09 16:57:15 +0800</pubDate>
    </item>
    <item>
      <title>用“不断前行的光标”触发文本框的滚动条。（程序与代码）</title>
      <link>https://blog.bccn.net/nhjsjjs/67731</link>
      <description>
	程序一“开始”，文本第一行就显示在文本框的底行。光标反复从底行的左端移动到右端。每当光标到达右端时，文本就上移一行。仔细观察还可以发现：当光标遇到逗号（，）或者句号（。）时，还会“略作停顿”。如果照着光标指示朗读（当前行始终在底行），那么光标移动的速度就是“语速”。可以通过改变Timer控件的Interval属性值来改变语速，因为两者是“反比例”关系。（Timer.Interval=60000\S,其中S是语速）。程序没有使用OCX控件，也没有用到API函数。代码很一般，稍有VB基础的读者，看代码比看我的文字描述更顺畅。（附件里漏了一个文件夹 “TEXT”,与程序放在一起，里面是要...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2021-12-02 20:51:29 +0800</pubDate>
    </item>
    <item>
      <title>“发言提词器”程序设计中的2个问题--“按句突显提示”（按标点分句）和“语速”控制  （附：程序和VB源文件）</title>
      <link>https://blog.bccn.net/nhjsjjs/67704</link>
      <description>1.我觉得“按句突出显示”，比“按行突出显示”的可读性更好。这里的“突出显示”，是指：用红色显示当前的句子。用什么方法来把文本按“指定的标点”分割为“句”呢？
&amp;nbsp; &amp;nbsp;在VB里，现成的语句是:&amp;nbsp; &amp;nbsp; &amp;nbsp;RT1.Span&amp;nbsp; "，。？！；", True, True&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; 其中RT1是 “RTF文本框”，Span 是它的方法， 双引号内是“指定的字符”。功能是：寻找指定的字符（标点），并选中经过的字。
例如：&amp;nbsp; &amp;nbsp; ……午茶...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2021-10-23 18:22:50 +0800</pubDate>
    </item>
    <item>
      <title>为配合我的相关博文，编了一个兼顾“体验、检验、实用”的“中文看打自测程序”（15分钟）（附件）</title>
      <link>https://blog.bccn.net/nhjsjjs/67648</link>
      <description>　　同事说很想体验一下那个程序，主要是看看评分后的“正误对照”部分，也想检验一下其评分结果的正确性、程序的实用性、大致计算时间、有无BUG等等。但是，如果每次都要先“打字15分钟”，就会让人兴致索然。能否考虑编个“专用”的程序。
　　于是，我在程序中加了２个功能：１．允许复制粘贴，然后可以对粘贴进来的文本进行有针对性的编辑修改，以观后效。２．设置一个按钮：可以直接“穿越15分钟”。如果你是真想测试一下自己的打字水平，那只要踏踏实实打完15分钟就是了。
　　写这篇博文是为了达到三个目的：检验、体验和实用。如发现问题和不足，请在我这篇博文下留言，真诚感谢！
３个界面插图是：打字前、打字...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2021-08-10 15:38:26 +0800</pubDate>
    </item>
    <item>
      <title>文本比对在中文打字评分中的运用--正确、错、漏、多的发现与应用</title>
      <link>https://blog.bccn.net/nhjsjjs/67611</link>
      <description>&amp;nbsp; &amp;nbsp; &amp;nbsp; 第一部分&amp;nbsp; 发现错、漏、多
&amp;nbsp; &amp;nbsp; 批改就是把“打字文本”和“样张文本”进行比对。
&amp;nbsp; &amp;nbsp; 批改的最起码的要求，就是在2个文本中，每个字都须定性为“正确”或“不正确”（样张中的“不正确”，意思是指“没有被正确地打出来，”，就是“被漏打”和“被打错”）。（例3中的绿色“带儿子”），（例4中的红色“莫斯科去”）；在录入中，不正确的字也可以分为2类：，一类叫做“多打”（例2中的蓝色“的”），另一类叫做“打错”（例4中的红色“墨西哥”）
“正确”的3个原则是：1.两个文本中的正确字一一对应。 2.不...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2021-06-18 10:03:44 +0800</pubDate>
    </item>
    <item>
      <title>LCS算法程序主过程中的一行语句的说明  [txt3 = txt3 &amp; Mid$(txt2, Ldot, n2 - Tmp - Ldot)]      (VB6)</title>
      <link>https://blog.bccn.net/nhjsjjs/67388</link>
      <description>&amp;nbsp; &amp;nbsp; 在主过程中,“txt3 = txt3 &amp;amp; Mid$(txt2, Ldot, n2 - Tmp - Ldot)”共出现了3次，而且这几乎就是“主过程”与“函数LCS()”的唯一区别。函数只须求出一串“参与字串”的长度,而主过程还要输出其内容。这句语句起什么作用呢？
我们说，“子序列”是由原字符串剔除了某些字符后所剩下字符按原来的顺序组成的。这“剩下字符”就是一段段连续的字符。我把每一段“剩下字符”称为“参与字串”[在图中用红色细框标出,下同]，剔除的字串称为“不参与字串”[在图中用浅蓝色粗横线标出,下同]。
这行语句的作用就是：在下行的字符串（txt...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-10-22 11:11:03 +0800</pubDate>
    </item>
    <item>
      <title>再谈LCS（最长公共子序列）另一解法-----用实例分析主过程和递归函数的解题过程（图）。附新编程序(LCS-1.exe)和网上收集的例题。</title>
      <link>https://blog.bccn.net/nhjsjjs/67377</link>
      <description>&amp;nbsp; &amp;nbsp;&amp;nbsp;主过程与函数几乎一样：（请参考2个附图）
把A、B两个字符串中的B、按从头到尾的顺序，逐个在A中寻找相同的字。会有3种结果：
1.直接找到（流程图中的“A”），于是这个字可以加入“最长序列”，然后n1+1、n2+1。这2个数的递增，保证了“一一对应”和“不颠倒顺序”。
2.从n1直到L1(A串的长度）都没有相同的字（流程图中的“Q”），那么这个字排除，且N2+1,而n1不增加，这样也遵守了上面的2个原则。
3.在A串的“延后几个字”（n1+k,k是延后的字数）找到（流程图中的“E”），这是必须按“最长”原则来定夺的，这正是“疑点”。函数中的“...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-09-10 15:52:21 +0800</pubDate>
    </item>
    <item>
      <title>LCS“最长公共子序列”的另一解题思路（绕开 6 X 7 宫格）----附件有自编的程序</title>
      <link>https://blog.bccn.net/nhjsjjs/67375</link>
      <description>
	


	


	为什么这个程序既可以验证一些网上LCS论文中举出的“短字符例题”（图一），也可以对代码稍作更改后，在1秒内求出近千字的“（无提醒打错的）中文打字测验”文本的“正确字数”（图二）。相信你在看了我下面的的描述后，应该可以有所明白。

&amp;nbsp; &amp;nbsp; 两个字串的“最长公共子序列”可以从这样的角度描述：有上下两个字串，把下字串从左到右每一个字在上面“找到相同的字”并“连线”。
&amp;nbsp; &amp;nbsp; 有2个要求：1.连线不许交叉。2.连线数“最多”。于是，在两个字串中“剔除”了“无法连线”的字之后，剩下的字串就是“最长公共子序列”了。
&amp;...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-09-03 12:40:50 +0800</pubDate>
    </item>
    <item>
      <title>中文打字测验文本的量化阅卷程序(续--其跟LCS的关系及应用）</title>
      <link>https://blog.bccn.net/nhjsjjs/67372</link>
      <description>&amp;nbsp; &amp;nbsp; 我们先看一个“不用计算机批改的例子”：
样张：“昨天小明带了一个变形金刚到小华家做客” 打字：“昨天小明明带了变形金刚一个到小华家做客” 。请你用肉眼批改有几个“正确字”。
你肯定会说：“正确字”的标准是什么？
根据一般的“共识”，我们会给出3个原则：1：一一对应。2：不颠倒顺序。3：“最长”原则。上述题目的批改结果是：“昨天小明带了变形金刚到小华家做客”(16个字)。
&amp;nbsp; &amp;nbsp; 为什么不是“昨天小明带了一个到小华家做客”(14个字)呢？这也符合原则1和原则2呀？这是因为：还有原则3呢。这其实不正是样张和录入的“最长公共子序列”吗？...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-08-28 13:18:18 +0800</pubDate>
    </item>
    <item>
      <title>中文打字测验文本的量化阅卷程序-流程图</title>
      <link>https://blog.bccn.net/nhjsjjs/67370</link>
      <description>
	借助“流程图”，用你熟悉的编程语言做出这个程序，应该不会太难。试试看。


	图一


	


	图二


	


	关于“错字数”的说明：
把“他到沈阳去了”打成“他到哈尔滨去了”，我这里是“错3”，有些批改程序为“错2多1”，这不影响“正确字数”。（它相当于我这里把 Tmp 拆成错和多两部分）
欢迎指出错误或不妥的地方，也欢迎交流和切磋。
</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-08-24 12:16:31 +0800</pubDate>
    </item>
    <item>
      <title>第二版“中文打字自测程序”</title>
      <link>https://blog.bccn.net/nhjsjjs/67309</link>
      <description>
	新版的改动主要是：在“时间到”后，不再出现第3个窗口，而是出现一个“对照（下拉）列表”，这样一来界面简洁多了。对比操作也更加简单。（见3个插图）


	


	


	
</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-06-27 16:14:11 +0800</pubDate>
    </item>
    <item>
      <title>上传一个自编的“文本修改前后对照.exe”  欢迎使用</title>
      <link>https://blog.bccn.net/nhjsjjs/67218</link>
      <description>程序特点：
1.“对照结果”的展示“别出心裁”：既可以在“导航窗口”纵览改动的“全局”，也可以“选中某个修改标记”来观察该修改处的详情。巨细兼顾。（图1，图2））
2.可以反复进行“对照--编辑修改”，直至满意，保存修改结果（全选后复制，粘贴到记事本保存）。
3.仅1个 52K 的.exe程序，不需要RTF控件。解压后就可以运行。
4.不采用那种“对比后彩色标注文字、对比的文字左右紧挨”的界面，那种界面虽然对照明显，但“可阅性”荡然无存，给著者的“斟字酌句”和现场编辑反而带来不便。
说明：程序中的“悬浮菜单”仅用于“操作提示”和“操作结果的信息反馈”，没有其他功能。单击菜单和单...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-05-21 10:26:03 +0800</pubDate>
    </item>
    <item>
      <title>小巧新颖的打字自测程序（下载、解压就可以运行，欢迎使用）</title>
      <link>https://blog.bccn.net/nhjsjjs/67100</link>
      <description>一、软件特点：
1.小巧（1个exe程序72k）、免安装、不需要外加 OCX 控件。
2.界面贴近实际（图1）。与众多的“打字测试软件”不同，既不会在样张上用“变色”来标出“已经打过的字”，也不会自动将录入光标对准“此刻该打的字”。更不会用“变色”来提示“打错了”。这个程序就像用“记事本”将“稿纸上”的文字录入到计算机里一样，不小心还有可能“漏字”和“多字”。这样的“测试”，才是贴近实际工作环境的。
3.阅卷方式很新颖（图2）：选中1个“特殊字符”（◆、■、●）后，可以观察错、多、漏的细节。既不改动“样张”和“录入”的原貌，又能直观地现出“左右对照”。
4.样张就像“纸张”，不仅...</description>
      <category>默认分类</category>
      <author>nhjsjjs</author>
      <pubDate>2020-05-03 20:54:14 +0800</pubDate>
    </item>
  </channel>
</rss>
