VB程序设计——文本修改前后对照(程序与源文件)

“文本比对程序”可以用来观察、对照2个文本之间的差异——【展示差异】。比如“文本修改前后对照”、“样张与打字文本的对照”等等。程序先要“搜索差异”、“储存差异”才能“展示差异”。 主程序是CmdMore ,用于“搜索差异”和“储存差异” 它跟递归函数LCS()的结构很像,只是增加了关于 QS()、CD() 的2个数组。为什么要用这2个数组呢?因为,我们要想“展示差异”,就需要【知道】各个差异的“位置”(起始位置QS)和各个差异的“长度”(CD)。这样,当程序在上下两边的“原文档”里自动选中了“差异字符串”时,就会非常醒目。 (这个部分的设计思路、流程图等等,可以参看我在本网...
默认分类 | 2023-06-21 12:05 | 阅读 963 次 | 评论 0 条

再说说“从公共子串的角度求解最长公共子序列”。 在主程序里加几行代码,一并求出“最长公共子串”(附程序、VB源文件和实验文件)

程序是把2个字符串中的1个(我用下行txt2)从左到右逐个判断“留”或“去”,从而最终求得“最长公共子序列”的。而要求得“最长公共子串”,解题的思路是:★在每个公共子串结束时,测量该公共子串的长度,将其与储存的“最大值”比较……这是最常用的求最大值的方法,这里不赘述了,可以看代码。关键是,什么叫做“公共子串结束时”? 为此,设置1个Boolean 数据类型的变量:Righ,用以记录“上一个字符的判断结果”(也就是当前的★状态):如果它是“留下”的(①或③1),就记录 Righ = True 状态,(当然同时要累加公共子串的字数);如果它是“不留”的(②或③2),就记录 Righ = F...
默认分类 | 2023-04-04 21:18 | 阅读 1201 次 | 评论 0 条

再说说“LCS”的算法-----分析我的博文(2022-12-09)插图上部的那条【绿色横线】区域

前一个公共子串结束后,上下两个字(位置是n1和n2)不相同,并且在n1的右面找到了与n2相同的字(图一中的“罗”--“罗”)。(插图二)里“上部的那条绿色横线”就表示:从n1(含n1)到“罗”之前(n1+r-1)(不含“罗”)的那个区域。这是一个关键区域。 我是这样分析的:如果下面的“罗”字因为不符合“最长”的缘故而不保留的话,那么在txt1(上面的字符串)里,★“最优的公共子串首字”一定在那个区域内(英白)!(因为,如果2个字都在“罗”的★右面(红色横线里),怎么可能比‘罗--罗’更长呢?) 于是,通过双重(For)循环和调用函数必然可以在“两条绿色横线”内找到“最优的公共子串首字...
默认分类 | 2023-02-07 16:18 | 阅读 1065 次 | 评论 0 条

为什么求解“最长公共子序列”(LCS)需要递归函数?——从“公共子串”的角度来分析问题(附程序和VB源文件)

我们知道:公共子序列是由一个个公共子串顺序连接而成的。为了求“最长公共子序列”,可以把字符串中的字分成2类:一类是要留下的(组成公共子串),另一类是要出列的。我们可以编程,把字符串(我取下面一行,txt2)从头到尾逐字鉴定该留还是该出列。 别看字符串五花八门、长长短短,鉴定起来却只有4种情况。而且并不是每一种都需要调用递归函数的。 我在【图一】中的每个公共子串的右面画一根蓝色竖线,表示原公共子串结束,新公共子串开始。 (下面所说的“情况一、情况二”,都可以用我们熟悉的、简单的编程语句来完成的。) 情况一:看第1个字“他”,上下2个字一样,“他”就留下,这情况我称为①。后面...
默认分类 | 2022-12-09 16:57 | 阅读 3618 次 | 评论 0 条

用“不断前行的光标”触发文本框的滚动条。(程序与代码)

程序一“开始”,文本第一行就显示在文本框的底行。光标反复从底行的左端移动到右端。每当光标到达右端时,文本就上移一行。仔细观察还可以发现:当光标遇到逗号(,)或者句号(。)时,还会“略作停顿”。如果照着光标指示朗读(当前行始终在底行),那么光标移动的速度就是“语速”。可以通过改变Timer控件的Interval属性值来改变语速,因为两者是“反比例”关系。(Timer.Interval=60000\S,其中S是语速)。程序没有使用OCX控件,也没有用到API函数。代码很一般,稍有VB基础的读者,看代码比看我的文字描述更顺畅。(附件里漏了一个文件夹 “TEXT”,与程序放在一起,里面是要...
默认分类 | 2021-12-02 20:51 | 阅读 1039 次 | 评论 0 条

“发言提词器”程序设计中的2个问题--“按句突显提示”(按标点分句)和“语速”控制 (附:程序和VB源文件)

1.我觉得“按句突出显示”,比“按行突出显示”的可读性更好。这里的“突出显示”,是指:用红色显示当前的句子。用什么方法来把文本按“指定的标点”分割为“句”呢? 在VB里,现成的语句是: RT1.Span ",。?!;", True, True 其中RT1是 “RTF文本框”,Span 是它的方法, 双引号内是“指定的字符”。功能是:寻找指定的字符(标点),并选中经过的字。 例如: ……午茶和晚茶。早茶通常清晨4时开市,很多顾客…… 当起始点(光标)在“。”和“早”之间时,执行这行语句后,会★自动选中 “早茶通常清晨4时开市”这...
默认分类 | 2021-10-23 18:22 | 阅读 1466 次 | 评论 0 条

为配合我的相关博文,编了一个兼顾“体验、检验、实用”的“中文看打自测程序”(15分钟)(附件)

  同事说很想体验一下那个程序,主要是看看评分后的“正误对照”部分,也想检验一下其评分结果的正确性、程序的实用性、大致计算时间、有无BUG等等。但是,如果每次都要先“打字15分钟”,就会让人兴致索然。能否考虑编个“专用”的程序。   于是,我在程序中加了2个功能:1.允许复制粘贴,然后可以对粘贴进来的文本进行有针对性的编辑修改,以观后效。2.设置一个按钮:可以直接“穿越15分钟”。如果你是真想测试一下自己的打字水平,那只要踏踏实实打完15分钟就是了。   写这篇博文是为了达到三个目的:检验、体验和实用。如发现问题和不足,请在我这篇博文下留言,真诚感谢! 3个界面插图是:打字前、打字...
默认分类 | 2021-08-10 15:38 | 阅读 2224 次 | 评论 0 条

文本比对在中文打字评分中的运用--正确、错、漏、多的发现与应用

第一部分 发现错、漏、多 批改就是把“打字文本”和“样张文本”进行比对。 批改的最起码的要求,就是在2个文本中,每个字都须定性为“正确”或“不正确”(样张中的“不正确”,意思是指“没有被正确地打出来,”,就是“被漏打”和“被打错”)。(例3中的绿色“带儿子”),(例4中的红色“莫斯科去”);在录入中,不正确的字也可以分为2类:,一类叫做“多打”(例2中的蓝色“的”),另一类叫做“打错”(例4中的红色“墨西哥”) “正确”的3个原则是:1.两个文本中的正确字一一对应。 2.不能颠倒顺序。3.选“给分最多”的方案。 例1:样张是“他叫英白罗”,打字是“他...
默认分类 | 2021-06-18 10:03 | 阅读 2030 次 | 评论 4 条

LCS算法程序主过程中的一行语句的说明 [txt3 = txt3 & Mid$(txt2, Ldot, n2 - Tmp - Ldot)] (VB6)

在主过程中,“txt3 = txt3 & Mid$(txt2, Ldot, n2 - Tmp - Ldot)”共出现了3次,而且这几乎就是“主过程”与“函数LCS()”的唯一区别。函数只须求出一串“参与字串”的长度,而主过程还要输出其内容。这句语句起什么作用呢? 我们说,“子序列”是由原字符串剔除了某些字符后所剩下字符按原来的顺序组成的。这“剩下字符”就是一段段连续的字符。我把每一段“剩下字符”称为“参与字串”[在图中用红色细框标出,下同],剔除的字串称为“不参与字串”[在图中用浅蓝色粗横线标出,下同]。 这行语句的作用就是:在下行的字符串(txt2,下同)中,剔除一...
默认分类 | 2020-10-22 11:11 | 阅读 1526 次 | 评论 0 条

再谈LCS(最长公共子序列)另一解法-----用实例分析主过程和递归函数的解题过程(图)。附新编程序(LCS-1.exe)和网上收集的例题。

主过程与函数几乎一样:(请参考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”),这是必须按“最长”原则来定夺的,这正是“疑点”。函数中的“>”就是由此引起的。 下面重...
默认分类 | 2020-09-10 15:52 | 阅读 2946 次 | 评论 2 条

LCS“最长公共子序列”的另一解题思路(绕开 6 X 7 宫格)----附件有自编的程序

为什么这个程序既可以验证一些网上LCS论文中举出的“短字符例题”(图一),也可以对代码稍作更改后,在1秒内求出近千字的“(无提醒打错的)中文打字测验”文本的“正确字数”(图二)。相信你在看了我下面的的描述后,应该可以有所明白。 两个字串的“最长公共子序列”可以从这样的角度描述:有上下两个字串,把下字串从左到右每一个字在上面“找到相同的字”并“连线”。 有2个要求:1.连线不许交叉。2.连线数“最多”。于是,在两个字串中“剔除”了“无法连线”的字之后,剩下的字串就是“最长公共子序列”了。 ★连线有3种情况,2种非常简单,1...
默认分类 | 2020-09-03 12:40 | 阅读 2150 次 | 评论 0 条

中文打字测验文本的量化阅卷程序(续--其跟LCS的关系及应用)

我们先看一个“不用计算机批改的例子”: 样张:“昨天小明带了一个变形金刚到小华家做客” 打字:“昨天小明明带了变形金刚一个到小华家做客” 。请你用肉眼批改有几个“正确字”。 你肯定会说:“正确字”的标准是什么? 根据一般的“共识”,我们会给出3个原则:1:一一对应。2:不颠倒顺序。3:“最长”原则。上述题目的批改结果是:“昨天小明带了变形金刚到小华家做客”(16个字)。 为什么不是“昨天小明带了一个到小华家做客”(14个字)呢?这也符合原则1和原则2呀?这是因为:还有原则3呢。这其实不正是样张和录入的“最长公共子序列”吗? 在一些编程语言中,都有现成的相关代码,...
默认分类 | 2020-08-28 13:18 | 阅读 1977 次 | 评论 0 条

中文打字测验文本的量化阅卷程序-流程图

借助“流程图”,用你熟悉的编程语言做出这个程序,应该不会太难。试试看。 图一 图二 关于“错字数”的说明: 把“他到沈阳去了”打成“他到哈尔滨去了”,我这里是“错3”,有些批改程序为“错2多1”,这不影响“正确字数”。(它相当于我这里把 Tmp 拆成错和多两部分) 欢迎指出错误或不妥的地方,也欢迎交流和切磋。
默认分类 | 2020-08-24 12:16 | 阅读 2185 次 | 评论 2 条

第二版“中文打字自测程序”

新版的改动主要是:在“时间到”后,不再出现第3个窗口,而是出现一个“对照(下拉)列表”,这样一来界面简洁多了。对比操作也更加简单。(见3个插图)
默认分类 | 2020-06-27 16:14 | 阅读 3476 次 | 评论 2 条

上传一个自编的“文本修改前后对照.exe” 欢迎使用

程序特点: 1.“对照结果”的展示“别出心裁”:既可以在“导航窗口”纵览改动的“全局”,也可以“选中某个修改标记”来观察该修改处的详情。巨细兼顾。(图1,图2)) 2.可以反复进行“对照--编辑修改”,直至满意,保存修改结果(全选后复制,粘贴到记事本保存)。 3.仅1个 52K 的.exe程序,不需要RTF控件。解压后就可以运行。 4.不采用那种“对比后彩色标注文字、对比的文字左右紧挨”的界面,那种界面虽然对照明显,但“可阅性”荡然无存,给著者的“斟字酌句”和现场编辑反而带来不便。 说明:程序中的“悬浮菜单”仅用于“操作提示”和“操作结果的信息反馈”,没有其他功能。单击菜单和单...
默认分类 | 2020-05-21 10:26 | 阅读 3141 次 | 评论 0 条

小巧新颖的打字自测程序(下载、解压就可以运行,欢迎使用)

一、软件特点: 1.小巧(1个exe程序72k)、免安装、不需要外加 OCX 控件。 2.界面贴近实际(图1)。与众多的“打字测试软件”不同,既不会在样张上用“变色”来标出“已经打过的字”,也不会自动将录入光标对准“此刻该打的字”。更不会用“变色”来提示“打错了”。这个程序就像用“记事本”将“稿纸上”的文字录入到计算机里一样,不小心还有可能“漏字”和“多字”。这样的“测试”,才是贴近实际工作环境的。 3.阅卷方式很新颖(图2):选中1个“特殊字符”(◆、■、●)后,可以观察错、多、漏的细节。既不改动“样张”和“录入”的原貌,又能直观地现出“左右对照”。 4.样张就像“纸张”,不仅...
默认分类 | 2020-05-03 20:54 | 阅读 3258 次 | 评论 0 条

介绍一个“记事本模式”的打字自测程序

这个程序是用VB6编制的,不需任何ocx控件。软件大小56k(含1个.exe程序和1个样张文件(yang.txt)。 特点:更贴近实际,无任何提示。犹如看着样纸,用“记事本”录入文字。如果你不认真看清样张,不仅可能打错,还会漏打和多打。阅卷操作也很方便、直观:只要选中一个“特殊字符”(◆、■、●)就可以看清错、漏、多的细节。
默认分类 | 2020-04-21 10:26 | 阅读 2817 次 | 评论 0 条

请教:给别人这样的程序会有什么不妥吗?

我用VB做了一个需要 外接 OCX 控件的程序。 如果把它放在另一台计算机上运行,很可能因为缺少相应的OCX 控件而报错。我采取如下的方法: 添加一个模块,见代码 Attribute VB_Name = "Module1" Option Explicit Private Sub Main() Dim r% r = Shell("regsvr32.exe " & App.Path & "\TEXT\RICHTX32.OCX /s", 1) DoEvents r = Shell("regsvr32.exe " & App.Pa...
默认分类 | 2019-12-24 17:41 | 阅读 1963 次 | 评论 0 条

补充一个视频

我在11月14日的博客中提到“左右正误对照”的方法:批改后,当你在“标准文本”里选中一个“错字”或“漏字”时,程序会立即在“打字文本”那里找到相应的文字或位置,这时,两边都有“选中”;同样,当你在“打字文本”里选中一个“错字”或“多字”时,程序也会立即在“标准文本”那里找到相应的文字或位置。可见,“两边都有选中”的效果,使“正误对照”很醒目。
默认分类 | 2019-11-18 09:17 | 阅读 2286 次 | 评论 0 条

VB6-文本框的这个属性让“左右正误对照”更加醒目

在这个程序的上2个版本中,我没有办法让左右两边“都选中”,只能用“一边选中、另一边加粗”来解决。但是这样处理,不仅“加粗”远不及“选中”来得醒目,而且后面还要“取消加粗”。 现在我知道了,只要把左右2个文本框的“HideSelection”属性都设置为“False”就行了。(现在再上传一次修改后的程序,以示补过。)
默认分类 | 2019-11-14 12:20 | 阅读 2786 次 | 评论 0 条
浏览96362次
文章分类