NewTopic


新建网页 1

1、扫描文本行：

子程序：_按钮1_被单击

局部变量：样本 数据类型：文本型
局部变量：次数
局部变量：分割文本 数据类型：文本型 数组：0

样本 ＝ “创建窗口 （ 哈（）哈 ， 窗口类 ）”
分割文本 ＝ 分割文本 (样本, “ ”, )
计次循环首 (取数组成员数 (分割文本), 次数)
编辑框1.加入文本 (分割文本 [次数] ＋ #换行符)
计次循环尾 ()

输入样本——

创建窗口 （ 哈（）哈 ， 窗口类 ）

输出结果——

创建窗口
（
哈（）哈
，
窗口类
）


新建网页 1

2、替换行文本：

子程序：_按钮1_被单击

局部变量：样本 数据类型：文本型
局部变量：次数
局部变量：分割文本 数据类型：文本型 数组：0

样本 ＝ “创建窗口” ＋ #换行符 ＋ “（” ＋ #换行符 ＋ “哈（）哈” ＋ #换行符 ＋ “，” ＋ #换行符 ＋ “窗口类” ＋ #换行符 ＋ “）” ＋ #换行符
分割文本 ＝ 分割文本 (样本, #换行符, )
计次循环首 (取数组成员数 (分割文本), 次数)
如果真 (分割文本 [次数] ＝ “创建窗口”)
分割文本 [次数] ＝ “扩展对象”
插入成员 (分割文本, 次数 ＋ 4, “继承自”)
重定义数组 (分割文本, 真, 取数组成员数 (分割文本))
如果真结束
如果真 (分割文本 [次数] ＝ “（”)
分割文本 [次数] ＝ “”
如果真结束
如果真 (分割文本 [次数] ＝ “）”)
分割文本 [次数] ＝ “”
如果真结束
如果真 (分割文本 [次数] ＝ “，”)
分割文本 [次数] ＝ “”
如果真结束
如果真 (分割文本 [次数] ＝ “窗口类”)
分割文本 [次数] ＝ “窗口对象模板”
如果真结束
如果真 (分割文本 [次数] ≠ “”)
编辑框1.加入文本 (分割文本 [次数] ＋ “ ”)
如果真结束
计次循环尾 ()
编辑框1.内容 ＝ 删尾空 (编辑框1.内容)

输入样本——

创建窗口
（
哈（）哈
，
窗口类
）

输出样本——

扩展对象 哈（）哈 继承自 窗口对象模板


新建网页 1

3、分析文本行结构：

子程序：_按钮1_被单击

局部变量：样本 数据类型：文本型
局部变量：分割文本 数据类型：文本型 数组：0
局部变量：被赋值 数据类型：文本型
局部变量：赋予值 数据类型：文本型
局部变量：次数 数据类型：整数型
局部变量：对象名 数据类型：文本型
局部变量：方法名 数据类型：文本型
局部变量：声明对象 数据类型：文本型
局部变量：声明值 数据类型：文本型

样本 ＝ 删首尾空 (编辑框1.内容)
分割文本 ＝ 分割文本 (样本, “ ”, )
如果真 (取数组成员数 (分割文本) ＞ 1)
如果真 (分割文本 [2] ＝ “＝”)
被赋值 ＝ 分割文本 [1]
计次循环首 (取数组成员数 (分割文本) － 2, 次数)
赋予值 ＝ 赋予值 ＋ 分割文本 [次数 ＋ 2]
计次循环尾 ()
编辑框2.内容 ＝ “ 这是赋值句式。” ＋ #换行符 ＋ “ 被赋值是：” ＋ 被赋值 ＋ “。” ＋ #换行符 ＋ “ 赋予值是：” ＋ 赋予值 ＋ “。”
如果真结束
如果真 (寻找文本 (分割文本 [2], “(”, , 真) ≠ -1)
如果 (寻找文本 (分割文本 [1], “.”, , 真) ＝ -1)
编辑框2.内容 ＝ “ 这是命令句式。” ＋ #换行符 ＋ “ 命令名是：” ＋ 分割文本 [1] ＋ “。”
如果真 (分割文本 [1] ＝ “如果” 或 分割文本 [1] ＝ “如果真” 或 分割文本 [1] ＝ “判断” 或 分割文本 [1] ＝ “判断循环首” 或 分割文本 [1] ＝ “循环判断首” 或 分割文本 [1] ＝ “计次循环首” 或 分割文本 [1] ＝ “变量循环首” 或 分割文本 [1] ＝ “到循环尾” 或 分割文本 [1] ＝ “跳出循环” 或 分割文本 [1] ＝ “返回” 或 分割文本 [1] ＝ “结束”)
编辑框2.加入文本 (#换行符 ＋ “ 这是流程控制命令句式。”)
如果真结束
否则
对象名 ＝ 取文本左边 (分割文本 [1], 寻找文本 (分割文本 [1], “.”, , 真) － 1)
方法名 ＝ 取文本右边 (分割文本 [1], 取文本长度 (分割文本 [1]) － 寻找文本 (分割文本 [1], “.”, , 真))
编辑框2.内容 ＝ “ 这是对象方法句式。” ＋ #换行符 ＋ “ 对象名是：” ＋ 对象名 ＋ “。” ＋ #换行符 ＋ “ 方法名是：” ＋ 方法名 ＋ “。”
如果结束
如果真结束
如果真结束
如果真 (取数组成员数 (分割文本) ≤ 1 且 寻找文本 (样本, “：”, , 真) ≠ -1)
声明对象 ＝ 取文本左边 (样本, 寻找文本 (样本, “：”, , 真) － 1)
声明值 ＝ 取文本右边 (样本, 取文本长度 (样本) － 寻找文本 (样本, “：”, , 真) － 1)
编辑框2.内容 ＝ “ 这是声明数据类型的句式。” ＋ #换行符 ＋ “ 声明对象：” ＋ 声明对象 ＋ “。” ＋ #换行符 ＋ “ 声明值：” ＋ 声明值 ＋ “。”
如果真结束

输入文本——

标签1.标题 ＝ “这是第” ＋ 标签1.标题 ＋ “个标签”

输出分析结果——

这是赋值句式。
被赋值是：标签1.标题。
赋予值是：“这是第”＋标签1.标题＋“个标签”。


Untitled Document

 5、分析文本行中括号是否匹配：

子程序：_按钮1_被单击

局部变量：样本 数据类型：文本型
局部变量：开括号数 数据类型：整数型
局部变量：关括号数 数据类型：整数型
局部变量：次数 数据类型：整数型
局部变量：当前位置1 数据类型：整数型
局部变量：当前位置2 数据类型：整数型
局部变量：匹配值 数据类型：整数型

编辑框2.内容 ＝ “”
样本 ＝ 删首尾空 (编辑框1.内容)
开括号数 ＝ 0
关括号数 ＝ 0
判断循环首 (寻找文本 (样本, “(”, 当前位置1 ＋ 1, 真) ≠ -1)
开括号数 ＝ 开括号数 ＋ 1
当前位置1 ＝ 寻找文本 (样本, “(”, 当前位置1 ＋ 1, 真)
判断循环尾 ()
判断循环首 (寻找文本 (样本, “)”, 当前位置2 ＋ 1, 真) ≠ -1)
关括号数 ＝ 关括号数 ＋ 1
当前位置2 ＝ 寻找文本 (样本, “)”, 当前位置2 ＋ 1, 真)
判断循环尾 ()
匹配值 ＝ 开括号数 － 关括号数
如果真 (匹配值 ＝ 0)
编辑框2.内容 ＝ “该代码行括号匹配。匹配值为” ＋ 到文本 (匹配值)
如果真结束
如果真 (匹配值 ＞ 0)
编辑框2.内容 ＝ “该代码行括号不匹配！缺少右括号。匹配值为” ＋ 到文本 (匹配值)
如果真结束
如果真 (匹配值 ＜ 0)
编辑框2.内容 ＝ “该代码行括号不匹配！缺少左括号。匹配值为” ＋ 到文本 (匹配值)
如果真结束

输入文本——

编辑框1.高度 ＝ 取用户区高度 ()))

输出文本——

该代码行括号不匹配！缺少左括号。匹配值为-2


Untitled Document

 7、将字节集数据转换成文本（即Hex字节集转换成Hex文本）
）：

子程序：_按钮1_被单击

局部变量：字节集 数据类型：字节集
局部变量：文本 数据类型：文本型
局部变量：循环次数

字节集 ＝ 到字节集 (编辑框1.内容)
计次循环首 (取字节集长度 (字节集), 循环次数)
文本 ＝ 文本 ＋ 到文本 (从字节集转换 (取字节集中间 (字节集, 循环次数, 1), 1)) ＋ “,”
计次循环尾 ()
编辑框2.内容 ＝ 文本

输入待转换成字节集的文本——

老婆！老婆！我爱你！就像老鼠爱大米！

输出文本——

192,207,198,197,163,161,192,207,198,197,163,161,206,210,176,174,196,227,163,161,190,205,207,241,192,207,202,243,176,174,180,243,195,215,163,161,


Untitled Document

 12、向记事本实时传递文本（需要先打开记事本）：

Dll命令：发消息
在Dll库中的命令名：SendMessageA
参数：hwnd
参数：wMsg
参数：wParam
参数：lParam 数据类型：文本型

Dll命令：取窗口
返回值类型：整数型
在Dll库中的命令名：GetWindow
参数：hwnd 数据类型：整数型
参数：wCmd 数据类型：整数型

Dll命令：找窗口
返回值类型：整数型
在Dll库中的命令名：FindWindowA
参数：lpClassName 数据类型：文本型
参数：lpWindowName 数据类型：文本型

子程序：_编辑框1_内容被改变

局部变量：窗口名 数据类型：文本型
局部变量：窗口句柄1
局部变量：窗口句柄2

窗口句柄1 ＝ 找窗口 (“notepad”, 窗口名)
*备注：notepad是记事本的类名，不管窗口名是什么，WINDOWS记事本的类名都一样，可以用GetClassName来得到。m是一个没有赋值的文本变量，相当于空文本。
窗口句柄2 ＝ 取窗口 (窗口句柄1, 5)
发消息 (窗口句柄2, 12, 0, 编辑框1.内容)


Untitled Document

 13、用易程序获取某应用程序（例如记事本）中输入的文字：

SendMessage (目标窗口句柄, 13, 文本最大长度, 文本缓冲区)


新建网页 1

[老鸟学易]易语言之算法研究(1)_列举法
//开篇语：
编程是一种乐趣，编程是一种享受！易语言实现我们中国人自己的梦想！感谢易语言，感谢吴涛！
易语言是一门容易入门的编程语言，甚至不是计算机专业的也同样可以跨进这个神秘的领域！

嘿嘿！不卖官话了，先从算法开始吧！
当然，易语言只是一种程序开发工具，而编写好的程序不仅需要熟练操作易语言，也需要积累各种编

写经验，比如实现一个目的，可以用几十行代码完成，也可以几行来实现，养成良好的编写风格很重要，

优化程序代码是每一位程序员都很注意的。
算法实际上是一种很抽象的解题方法，是实现目的准确而完整的描述。
我们先介绍“列举法”在易语言中实现的方法。//如果时间允许，我会继续编写各种我所知道到一些浅薄

知识与大家共勉！

列举法，顾名思义是列举出所有可能的情况，并用问题的条件来一一检验，特点比较简单，但是在写

列举算法时尽量过滤掉一些不必要的情况，优化算法。下面举一例子在易语言编写代码实现。
大家都知道百鸡的问题吧！母鸡每只3元，公鸡每只2元，小鸡每只0.5元，计算一下如何100块钱买100只

鸡。
下面是列举所有可能的条件代码。

局部变量：母鸡 数据类型：整数型
局部变量：公鸡 数据类型：整数型
局部变量：小鸡 数据类型：整数型

变量循环首 (0, 100, 1, 母鸡)
变量循环首 (0, 100, 1, 公鸡)
小鸡 ＝ 100 － 公鸡 － 母鸡
如果真 (3 × 母鸡 ＋ 2 × 公鸡 ＋ 0.5 × 小鸡 ＝ 100)
//输出母鸡、公鸡、小鸡的数目
如果真结束
变量循环尾 ()
变量循环尾 ()

//分析：因为母鸡是3元/只，最多也就是买33只;公鸡是2元/只，最多也就是买50只。
因为用的是变量循环首套变量循环首，所以公鸡最多也就是买50-母鸡只。
代码可以优化为：

变量循环首 (0, 33, 1, 母鸡)
变量循环首 (0, 50-母鸡, 1, 公鸡)
小鸡 ＝ 100 － 公鸡 － 母鸡
如果真 (3 × 母鸡 ＋ 2 × 公鸡 ＋ 0.5 × 小鸡 ＝ 100)
//输出母鸡、公鸡、小鸡的数目
如果真结束
变量循环尾 ()
变量循环尾 ()

//不到之处请多包含，支持易语言，如果有人喜欢这样的帖，我会继续发，谢谢！

点击浏览该文件


新建网页 1

[老鸟学易]易语言之算法研究(2)_递归算法
接上篇列举算法，没看过的朋友请点击：

//下面学习在易语言中递归算法的运用。
在易语言中许多地方可以用到递归算法，典型特征是自己调用自己。逐步到达条件边界，直到目的完成，如：寻找文件等，递归算法结构比较简练，清晰易读，但是缺点是执行效率比较抵。

//下面来练习寻找的的写法。
首先需要作一个单独的寻找子程序，如名字取为“寻找”，参数为“寻找路径” 文本型。
//由于寻找文件命令很特殊，好多初学者不好理解，因为寻找文件每次只返回一个匹配对象，所以一定要用循环才可以找到所有的匹配条件者，而第一次使用寻找找到一个匹配条件者，再继续寻找其他文件就不需要指定寻找文件条件了。

看代码：代码分3部分。

子程序：寻找

参数：寻找路径 数据类型：文本型

局部变量：文件名 数据类型：文本型

如果真 (取文本右边 (寻找路径, 1) ≠ “\”)
寻找路径 ＝ 寻找路径 ＋ “\”

//第一部分，判断指定“寻找路径”参数右边是否带“\”，如果不带，就自动加上。

文件名 ＝ 寻找文件 (寻找路径 ＋ “*.tmp”, )
判断循环首 (文件名 ≠ “”)
//输出找到的 寻找路径 ＋ 文件名，常用加入到列表框、超级列表框。
文件名 ＝ 寻找文件 (, )
判断循环尾 ()

//第二部分是关键代码，首先调用 文件名 ＝ 寻找文件 (寻找路径 ＋ “*.tmp”, ) ，因为只返回一个文本，所以用一个判断循环，判断 文件名 是否为空 ，如果不空 继续寻找，否者。。。。。
这部分只寻找一个目录里所有匹配者，不会寻找里面文件夹里的匹配者，当然不能放过它们，下面的代码就是：
文件名 ＝ 寻找文件 (寻找路径 ＋ “*.*”, #子目录)
判断循环首 (文件名 ≠ “”)
如果真 (取文本左边 (文件名, 1) ≠ “.”)
寻找 (寻找路径 ＋ 文件名)
如果真结束
文件名 ＝ 寻找文件 (, #子目录)
判断循环尾 ()
//第三部分是递归算法，等于子程序调用自己子程序，/寻找 (寻找路径 ＋ 文件名)/就是这句，你也许会问，如果真 (取文本左边 (文件名, 1) ≠ “.”)是什么意思，其实就是判断文件名是不是文件夹，再
XP命令提示符输入“dir”,一看就知道了。“.”是本目录，“..”是上一级目录。

//一定不要忘了在这个子程序里面加上 处理事件 () 否则运行后你的机器上死了一样。
好了,具体的阐述讲解请看易语言的帮助提示。如果想中途停止怎么办？：）建一个程序集变量。循环中加个判断就OK了。具体的请看实例代码。

只要大家不烦，我会继续写这些的。毕竟对初学者有帮助。
点击浏览该文件


新建网页 1

[老鸟学易]易语言之算法研究(3)_插值排序
谢谢大家的鼓励！所以今天很忙，我也要写上两句！
关于算法的书很多，大家可以去书店淘淘金，我这里不祥讲它们的概念，只讲在易语言中的各

种运用，当然，大家可以批评指正某些错误，千万不要误导易友。
开工！今天讲两个实例来研究，易语言中的排序插值运用。

//随机生成数字或文本。按大小或小大排序。

解法1分析：最经典的算法是冒泡，这里先不讲，以后我会写个好的例子。
现在我们用数组排序。。如果是数字可以用数组的“数组排序 (, )”
请看代码：

局部变量：排序变量 数据类型：整数型 数组：0
局部变量：变量1
局部变量：变量2

重定义数组 (排序变量, 假, 0)
列表框2.列表项目 ＝ { }
变量2 ＝ 列表框1.取项目数 ()
计次循环首 (变量2, 变量1)
加入成员 (排序变量, 到数值 (列表框1.取项目文本 (变量1 － 1)))
计次循环尾 ()
数组排序 (排序变量, 真)//这个子程序的核心代码。
计次循环首 (变量2, 变量1)
列表框2.加入项目 (到文本 (排序变量 [变量1]), )
计次循环尾 ()

//看上面的代码是简段，但是在某些时候，比如多项排序，就不好控制了，多位数组动态加入

会自动变成单维的。下面是排序的标准写法，当然我只是做了个框架，学习的朋友可以好好看

代码加以扩展。

局部变量：排序变量 数据类型：整数型 数组：0
局部变量：变量1
局部变量：变量2
局部变量：插入位置
局部变量：数据

列表框2.列表项目 ＝ { }
重定义数组 (排序变量, 假, 0)
变量2 ＝ 列表框1.取项目数 ()

计次循环首 (变量2, 变量1)
数据 ＝ 到数值 (列表框1.取项目文本 (变量1 － 1))
如果 (变量1 ＝ 1)
插入成员 (排序变量, 1, 数据)
否则
计次循环首 (取数组成员数 (排序变量), 变量1)
如果 (数据 ≥ 到数值 (排序变量 [变量1]))
插入位置 ＝ 插入位置 ＋ 1
否则
跳出循环 ()
如果结束
计次循环尾 ()
如果结束
插入成员 (排序变量, 插入位置, 数据)
插入位置 ＝ 1 //把位置改成首位。

计次循环尾 ()

计次循环首 (变量2, 变量1)
列表框2.加入项目 (到文本 (排序变量 [变量1]), )
计次循环尾 ()

//上面只是数值排序，大家可以练习一下文本、时间、逻辑。呵呵！
当然，此代码也不是排序最优算法，大家可以学习应用到其他地方！

今天有点忙！解释不够详细，请多包含！
详细请看代码。
点击浏览该文件


新建网页 1

[老鸟学易]易语言之算法研究(4)_对分查找
//谢谢指正，叫对分查找在排序中运用比较合适.

继续！感谢大家鼓励！我会再写几个常用算法应用。以后会也写其他操作技巧，比如数组、

字节集、DLL、注册表等。。

打开上一次“插值排序”的代码，我们分析一下做以“对分”优化。
数据越多越能体现对分查找法的好处！
//每次都要插入到变量，并且都一一循环比较，那样其不浪费。
因为每次插入都是比较大小安排插入位置，为了插入大于和小于数值的中间。
如果4 6 8 50 55 59 如果给一个56，当然知道插入到55后面，以前的代码
是从4开始一一比较，而我们可以直接把数组对分，比一下是比前一部分大，还是比后一部

分大，再在剩余结果对分比较，再对分。。。。，逐一比较上面是比较5次，，对分比较2次，

数据越多，越能体现。
//代码改为：
代码好长，希望学习的朋友耐心看我的解释。

局部变量：排序变量 数据类型：整数型 数组：0
局部变量：变量1 数据类型：整数型
局部变量：变量2 数据类型：整数型
局部变量：插入位置 数据类型：整数型
局部变量：数据 数据类型：整数型
局部变量：M 数据类型：整数型
局部变量：K 数据类型：整数型
局部变量：J 数据类型：整数型
局部变量：中间数据 数据类型：整数型

列表框2.列表项目 ＝ { }
重定义数组 (排序变量, 假, 0)
变量2 ＝ 列表框1.取项目数 ()
计次循环首 (变量2, 变量1)
K ＝ 1
M ＝ 取数组成员数 (排序变量)
数据 ＝ 到数值 (列表框1.取项目文本 (变量1 － 1))
判断 (变量1 ＝ 1)
插入成员 (排序变量, 1, 数据)
※草稿：第一次必须先加入数据
到循环尾 ()
判断 (数据 ≥ 排序变量 [M])
插入成员 (排序变量, M ＋ 1, 数据)
※草稿：比较数组的最大位
到循环尾 ()
判断 (数据 ≤ 排序变量 [1])
※草稿：比较数组的最小位
插入成员 (排序变量, 1, 数据)
到循环尾 ()
默认
判断结束
判断循环首 (K ＜ M － 1)
※草稿：对分查找的结构
J ＝ (K ＋ M) ＼ 2
※草稿：取中间位置
中间数据 ＝ 排序变量 [J]
※草稿：取中间位置的数据
如果真 (数据 ＝ 中间数据)
K ＝ J
跳出循环 ()
如果真结束
如果 (数据 ＜ 中间数据)
M ＝ J
否则
K ＝ J
如果结束
判断循环尾 ()
插入位置 ＝ K ＋ 1
插入成员 (排序变量, 插入位置, 数据)
※草稿：插入位置 ＝ 1
计次循环尾 ()

计次循环首 (变量2, 变量1)
列表框2.加入项目 (到文本 (排序变量 [变量1]), )
计次循环尾 ()

点击浏览该文件

//喘一口气!!希望易友细细品位代码，吸取有用的知识。

//出个题吧。给出排好的一组数据。再给你一个数值，插入到里面，不改变排列顺序。
如：1 5 8 10 15 22 25 给一个17。插入后变成 1 5 8 10 15 17 22 25