开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 13236|回复: 79
收起左侧

[易语言纯源码] 汇编极速分割文本演示带源码无模块

[复制链接]
结帖率:100% (11/11)
发表于 2018-9-10 22:30:11 | 显示全部楼层 |阅读模式   陕西省渭南市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
易语言的分割文本速度真的慢.偏偏论坛里经常有人在用这个功能.这几天基本都没抢回帖.一直在折腾这个了.
过程跳过,最后的结果是这样.不能变成一个很完整的模块功能,在使用上有一点点小限制.但我觉得还是有实用价值的.所以放上来测试一下.

附件里是例子,使用要注意的都有注释.这里也说一下.
易所有使用的变量都是要回收的.在结束的时间.所以定义数组时要进行预定义.我加的大.实际可以根据需要设置.每个成员占一个整数的位置.也就是4字节.怕麻烦的就设置大一些.关系不大.
第一句取数组成员数也是完成数组内存分配的.这个没办法去掉了.
过程很简单.给字节集内容.给数组.分隔符暂时没有考虑.如果功能真的实用了.再考虑.
使用字节集也是为了专门处理大文件.起码可以少转换一次.
最后献上不太长的代码..最后要说的是没有模块.源码是使用了汇编_取随机数做演示才用到了模块.

  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
文本数组1文本型99999999牵扯内存释放,所以要预分配,只要大于你分割后的数组成员就行
文本内容字节集这里是要分割的文本字节集内容,这里将存在数组内容,数组只是一个指针集合
计数器整数型 
行数整数型 
时间1整数型 
取数组成员数 (文本数组1)  ' 程序结束时易会释放所有变量,需要这一句来给数组预申请内存空间
文本内容 = 读入文件 (“R:\Desktop\123.txt”){ 0 }
' 文本内容2 = 到文本 (文本内容)
如果真 (取字节集长度 (文本内容) < 4)
调试输出 (“文件为空”)

时间1 = 取启动时间 ()
汇编_分割文本 (文本内容, 文本数组1)
调试输出 (“分割用时: ”, 取启动时间 () - 时间1)
调试输出 (“共”, 取数组成员数 (文本数组1), “成员”)
计次循环首 (4, )
行数 = 汇编_取随机数 (1, 取数组成员数 (文本数组1))
调试输出 (行数, 文本数组1 [行数])
计次循环尾 ()
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
汇编_分割文本整数型 
参数名类 型参考可空数组备 注
参_文本内容字节集
参_文本数组文本型
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 184, 1, 0, 0, 0, 137, 3, 137, 83, 4, 138, 2, 60, 13, 117, 7, 49, 192, 136, 2, 66, 226, 243, 60, 10, 117, 19, 49, 192, 136, 2, 66, 139, 3, 64, 137, 3, 193, 224, 2, 1, 216, 137, 16, 226, 220, 66, 226, 217, 139, 3, 201, 194, 8, 0 })
返回 (0)


i支持库列表   支持库注释   
spec特殊功能支持库

汇编_分割文本.e

742.19 KB, 下载次数: 256, 下载积分: 精币 -2 枚

点评

63楼加入分隔符,带注释   陕西省渭南市  发表于 2018-9-29 14:19
新修改的版本在50楼了.加入单字节的分割.多字节又复杂又影响效率.就不加了吧.   陕西省渭南市  发表于 2018-9-23 17:21
没有分割符那是怎么分割的,换行符?   江西省萍乡市  发表于 2018-9-14 12:20

评分

参与人数 2好评 +2 精币 +6 收起 理由
Chlrun + 1 + 3 支持开源~!感谢分享
hellohexiang + 1 + 3 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

发表于 2020-1-7 21:34:08 | 显示全部楼层   辽宁省沈阳市
作者吱吱吱吱吱吱吱吱
回复 支持 反对

使用道具 举报

发表于 2019-8-16 00:43:05 | 显示全部楼层   广东省广州市
66666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (6/6)

签到天数: 1 天

发表于 2019-6-16 13:34:57 | 显示全部楼层   陕西省西安市
很快  使用,比自带的快很多了
回复 支持 反对

使用道具 举报

发表于 2019-5-1 13:27:09 | 显示全部楼层   贵州省遵义市
感谢大神分享
回复 支持 反对

使用道具 举报

结帖率:29% (6/21)

签到天数: 2 天

发表于 2019-4-5 00:31:54 | 显示全部楼层   湖南省邵阳市
全汇编文本操作模块速度
回复 支持 反对

使用道具 举报

发表于 2019-3-3 20:12:19 | 显示全部楼层   四川省广元市
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

 楼主| 发表于 2018-10-22 17:11:23 | 显示全部楼层   陕西省渭南市
未离吖 发表于 2018-10-22 16:44
大佬,为啥我运行的时候执行两次分割就会崩啊嘤嘤嘤

分割不会出错.但数组成员没有分配内存就不行.

两种.一种是在最开始就设置一个大的成员数.
第二种时在子程序返回前将数组重定义回0
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2018-10-22 16:44:31 | 显示全部楼层   广东省深圳市
大佬,为啥我运行的时候执行两次分割就会崩啊嘤嘤嘤
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

 楼主| 发表于 2018-10-5 15:10:44 | 显示全部楼层   陕西省渭南市
用图片说明一下数组的结构.
易的分割文本为什么慢呢.这是因为每增加一个成员时,都需要先申请内存,写数据内容,写数据指针.修改成员数.次数多了就会很慢的.
好处是增加删除成员时很方便.内存管理也方便.在过程结束时系统会自动释放临时变量使用的内存的.
幻灯片1.JPG
幻灯片2.JPG
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

 楼主| 发表于 2018-9-29 14:18:34 | 显示全部楼层   陕西省渭南市
加上分隔符参数了.使用时注意第一条指令一定是 取数组成员数()

  
子程序名返回值类型公开备 注
汇编_分割文本 快速分割文本
参数名类 型参考可空数组备 注
参_内容字节集字节集待分割文本
参_文本数组文本型请在第一条语句执行取数组成员数来分配数组内存
参_分隔符字节集分割符,可空
变量名类 型静态数组备 注
局_内容字节集使用局部变量,不再破坏参数内容,会增加内存使用
' 如果内容为空,返回
如果真 (取字节集长度 (参_内容) = 0)
返回 ()
' 默认使用换行符分割
如果真 (是否为空 (参_分隔符))
参_分隔符 = { 13, 10 }
局_内容 = 参_内容
' 补齐分隔符
如果真 (取字节集右边 (局_内容, 取字节集长度 (参_分隔符)) ≠ 参_分隔符)
局_内容 = 局_内容 + 参_分隔符
' 将变量地址传到代码里,这个是可以直接取的.如果命令取的话.局部变量的存放位置就可以随意调整了
取变量地址 (局_内容)
置入代码 ({ 137, 195, 139, 27, 139, 75, 4, 141, 123, 8, 139, 69, 16, 139, 0, 139, 80, 4, 139, 69, 12, 139, 24, 131, 195, 4, 49, 192, 137, 3, 255, 3, 137, 123, 4, 252, 139, 69, 16, 139, 0, 141, 112, 8, 172, 242, 174, 227, 35, 65, 79, 81, 137, 209, 78, 243, 166, 117, 19, 137, 209, 49, 192, 41, 215, 243, 170, 255, 3, 139, 3, 193, 224, 2, 1, 216, 137, 56, 89, 41, 215, 71, 226, 208, 139, 69, 16, 139, 0, 138, 64, 8, 58, 71, 255, 116, 4, 255, 11, 235, 5, 49, 192, 137, 71, 255 })
' ------------------使用说明----------------------
' 代码调用前需要两个变量.一个是字节集的等分割内容.第二个是文本数组,需要提前定义成员数并在第一条命令执行 取数组成员数(文本数组) 来分配内存
' 代码调用完成后,形成映像文本数组,实际内容存放在第一个字节集变量中.两者配合形成真正的数组.在使用完成前不要修改第一个变量的值.
' 测试时发现很多奇怪的分隔符,所以分隔符使用字节集了.方便调试和调用.
' mov ebx, eax  传进来的局部变量地址
' mov ebx, dword [ebx]  取指针地址
' mov ecx, dword [ebx+0x04]  取字节集长度
' lea edi, dword [ebx+0x08]  取内容开始地址
' mov eax, dword [ebp+0x10]  取分隔符地址
' mov eax, dword [eax]
' mov edx, dword [eax+0x04]  取分隔符长度
' mov eax, dword [ebp+0x0C]  取数组地址
' mov ebx, dword [eax]
' add ebx, 0x04  保存数组成员数地址
' xor eax, eax
' mov dword [ebx], eax  重置数组成员数
' inc dword [ebx]  加入第一位成员
' mov dword [ebx+0x04], edi  第一位成员地址指针
' cld
' Label3:
' mov eax, dword [ebp+0x10]  取分隔符
' mov eax, dword [eax]
' lea esi, dword [eax+0x08]
' lodsb
' repne scasb  扫描分隔符
' jecxz Label1  内容扫描结束
' inc ecx  退回一格进行完整的分隔符比较
' dec edi
' push ecx  保存计数
' mov ecx, edx  分隔符长度
' dec esi
' rep cmpsb  比较分隔符
' jne Label2  不是分隔符,跳
' mov ecx, edx  将分隔符填充为0
' xor eax, eax
' sub edi, edx
' rep stosb
' inc dword [ebx]  成员数加一
' mov eax, dword [ebx]  取数组成员数
' shl eax, 0x02  计算数组成员指针地址
' add eax, ebx
' mov dword [eax], edi  写数据地址指针到成员表
' Label2:
' pop ecx  恢复计数
' sub edi, edx  修正指针位置
' inc edi
' loop Label3  循环处理
' Label1:
' mov eax, dword [ebp+0x10]  如果是单字节分隔符时
' mov eax, dword [eax]
' mov al,byte ptr  [eax+0x08]
' cmp al,byte ptr [edi-1]  比较是否是分隔符
' jz addr3
' dec dword [ebx]  不符合时减去开始增加的那个分隔符
' jmp addrend
' addr3:
' xor eax,eax  写文本结束符
' mov [edi-1],eax
' addrend:



i支持库列表   支持库注释   
spec特殊功能支持库

点评

数组如果不预定义的话.需要在使用前进行数组重定义.并且在使用完数组后再次使用数组重定义将成员数去掉.不然易会傻傻的去释放没有申请的内存.会报错的.   陕西省渭南市  发表于 2018-10-1 10:20
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表