开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 3757|回复: 20
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 修复黑月编译的【读入一行()】问题!

[复制链接]
结帖率:100% (9/9)
跳转到指定楼层
楼主
发表于 2021-2-7 16:35:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   广东省江门市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 hmyroot 于 2021-2-7 18:13 编辑

最近在写Hosts文件修改程序遇到一个黑月编译的BUG,在易语言里调试运行没有任何问题,但用黑月编译就无法读入每一行,这种BUG有点坑因为没有任何错误提示,黑月编译的时候其实是将易语言的所有命令转为黑月自己的命令再编译,所以遇到这种错误非常麻烦。既然这个命令用不了但问题总得要解决,然后花了一个下午的研究终于搞掂这个BUG了,完美模仿易语言的读入一行()。黑月编译程序不知道还有没有大佬维护?@邓学彬 @被封七号
修复黑月读入一行()BUG.7z (61.4 KB, 下载次数: 12)


黑月编译后无法读入每一行,原因在处理换行符的时候出错


易语言自带的可以读入每一行


完美模仿易语言的读入一行()
  
子程序名返回值类型公开备 注
读入一行_黑月专版字节集 本命令用作从文件中当前读写位置读取并返回一行文本数据,如果读入失败将返回空字节集并且自动将当前文件读写位置移到文件尾部
参数名类 型参考可空数组备 注
文件号整数型该文件号由“打开文件”命令所返回的整数
抛弃换行符逻辑型如果为真,行末的回车符及换行符将被抛弃{13,10}
变量名类 型静态数组备 注
文件字节集字节集 
记录位置整数型2
换行处理字节集 
记录位置 [1]取读写位置 (文件号)
如果真 (记录位置 [1] = -1)
移到文件尾 (文件号)
返回 ({  })
文件字节集 = 读入字节集 (文件号, 取文件长度 (文件号) - 记录位置 [1])
' 调试输出 (文件字节集)
记录位置 [2]寻找字节集 (文件字节集, { 13, 10 }, 1)
如果真 (记录位置 [2] = -1)
记录位置 [2] = 记录位置 [1]
移动读写位置 (文件号, 1, 记录位置 [1])
换行处理 = 读入字节集 (文件号, 记录位置 [2] + 1)
' 调试输出 (取读写位置 (文件号))
如果真 (抛弃换行符)
换行处理 = 取字节集左边 (换行处理, 取字节集长度 (换行处理) - 2)
返回 (换行处理)


评分

参与人数 2好评 +1 精币 +1 收起 理由
ghost12 + 1 支持开源~!感谢分享
1301ok + 1 奉上小小红包希望笑纳

查看全部评分


结帖率:100% (9/9)

签到天数: 1 天

来自 2楼
 楼主| 发表于 2021-2-7 18:27:30 | 只看该作者   广东省江门市
最新_修复删除换行符问题
  
子程序名返回值类型公开备 注
读入一行_黑月专版字节集 本命令用作从文件中当前读写位置读取并返回一行文本数据,如果读入失败将返回空字节集并且自动将当前文件读写位置移到文件尾部
参数名类 型参考可空数组备 注
文件号整数型该文件号由“打开文件”命令所返回的整数
抛弃换行符逻辑型如果为真,行末的回车符及换行符将被抛弃{13,10}
变量名类 型静态数组备 注
文件字节集字节集 
记录位置整数型2
换行处理字节集 
记录位置 [1]取读写位置 (文件号)
如果真 (记录位置 [1] = -1)
移到文件尾 (文件号)
返回 ({  })
文件字节集 = 读入字节集 (文件号, 取文件长度 (文件号) - 记录位置 [1])
' 调试输出 (到文本 (文件字节集))
记录位置 [2]寻找字节集 (文件字节集, { 13, 10 }, 1)
如果真 (记录位置 [2] = -1)
记录位置 [2] = 记录位置 [1]
移动读写位置 (文件号, 1, 记录位置 [1])
换行处理 = 读入字节集 (文件号, 记录位置 [2] + 1)
' 调试输出 (取读写位置 (文件号))
调试输出 (换行处理)
如果真 (抛弃换行符)
如果真 (倒找字节集 (换行处理, { 13, 10 }, ) ≠ -1)
换行处理 = 取字节集左边 (换行处理, 取字节集长度 (换行处理) - 2)

返回 (换行处理)


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

回复 支持 反对

使用道具 举报

结帖率:83% (39/47)

签到天数: 20 天

来自 3楼
发表于 2021-2-7 20:22:09 | 只看该作者   福建省宁德市
同时支持 \r\n, \n\r, \r, \n 四种格式+高性能

  
子程序名返回值类型公开备 注
L_文件读写_读入一行文本型 从文件中当前读写位置读取并返回一行文本数据,自动判断换行符格式,支持各种换行符格式
参数名类 型参考可空数组备 注
文件句柄整数型
读入缓冲区长度整数型单位:字节; 默认为128; 根据你每一行数据大概多长来设置的话能够提升性能
返回_换行符格式文本型返回识别到的换行符格式
变量名类 型静态数组备 注
局_缓冲区字节集 
局_当前缓冲区长度整数型 
局_当前缓冲区指针整数型 
局_当前字节字节型 
局_下一个字节字节型 
局_偏移整数型 
局_读到文件尾逻辑型 
局_当前行字节集 
i整数型 
i2整数型 
如果真 (读入缓冲区长度 ≤ 0)
读入缓冲区长度 = 128
循环判断首 ()
局_缓冲区 = L_文件读写_读入字节集 (文件句柄, 读入缓冲区长度)  ' 每次读64字节
局_当前缓冲区长度 = L_字节集_取长度 (局_缓冲区)
如果真 (局_当前缓冲区长度 = 0)
返回 (取字节集数据 (局_当前行, #文本型, ))
如果真 (局_当前缓冲区长度 ≠ 读入缓冲区长度)
局_读到文件尾 = 真
局_当前缓冲区指针 = L_指针_取字节集指针 (局_缓冲区)
计次循环首 (局_当前缓冲区长度, i)
局_当前字节 = L_指针_到字节型 (局_当前缓冲区指针 + i - 1)
如果真 (局_当前字节 = 10 局_当前字节 = 13)
局_当前行 = 局_当前行 + 指针到字节集 (局_当前缓冲区指针, i - 1)
如果 (i = 局_当前缓冲区长度)
局_下一个字节 = 取字节集数据 (L_文件读写_读入字节集 (文件句柄, 1), #字节型, )
如果真 (局_下一个字节 ≠ 0)
' 如果下一个字节不是10或13 读写位置就退回一位
局_偏移 = 0
如果 (局_当前字节 = 10)
如果真 (局_下一个字节 ≠ 13)
局_偏移 = 1

如果真 (局_下一个字节 ≠ 10)
局_偏移 = 1

L_文件读写_移动读写位置 (文件句柄, -局_偏移, 1)  ' 退回多读取的数据

局_下一个字节 = L_指针_到字节型 (局_当前缓冲区指针 + i)
' 如果下一个字节是10或者13 读写位置退回时额外前进一位
局_偏移 = 0
如果 (局_当前字节 = 10)
如果真 (局_下一个字节 = 13)
局_偏移 = 1

如果真 (局_下一个字节 = 10)
局_偏移 = 1

L_文件读写_移动读写位置 (文件句柄, i - 局_当前缓冲区长度 + 局_偏移, 1)  ' 退回多读取的数据

如果 (局_当前字节 = 10)
如果 (局_下一个字节 = 13)
返回_换行符格式 = 字符 (10)字符 (13)
返回_换行符格式 = 字符 (10)

如果 (局_下一个字节 = 10)
返回_换行符格式 = 字符 (13)字符 (10)
返回_换行符格式 = 字符 (13)


' 调试输出 (局_当前行, i - 局_当前缓冲区长度)
返回 (取字节集数据 (局_当前行, #文本型, ))

计次循环尾 ()
局_当前行 = 局_当前行 + 局_缓冲区
如果真 (L_文件读写_是否在文件尾 (文件句柄))
返回 (取字节集数据 (局_当前行, #文本型, ))

循环判断尾 (文件句柄 ≠ 0)
返回 (“”)

回复 支持 反对

使用道具 举报

结帖率:83% (39/47)

签到天数: 20 天

来自 4楼
发表于 2021-2-7 20:31:23 | 只看该作者   福建省宁德市
为了能更快捷地访问GitHub 顺手写了个hosts配置类
https://125.confly.eu.org/forum.php?mod=viewthread&tid=14665792
回复 支持 反对

使用道具 举报

来自 5楼
发表于 2021-2-7 23:31:33 | 只看该作者   广西壮族自治区南宁市
感谢楼主反馈的问题,该问题已得到修复,可前往黑月问题反馈群(820528017),在群共享中的测试版本目录中下载。
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)
6
发表于 2021-2-7 16:44:41 | 只看该作者   重庆市重庆市
你应该在黑月的官方git上提iss修复问题  这样黑月就更新了

回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 1 天

7
 楼主| 发表于 2021-2-7 16:49:38 | 只看该作者   广东省江门市
薆要执著 发表于 2021-2-7 16:44
你应该在黑月的官方git上提iss修复问题  这样黑月就更新了

我没有Git账号,懒得上
回复 支持 反对

使用道具 举报

结帖率:86% (19/22)
8
发表于 2021-2-7 17:19:52 | 只看该作者   四川省成都市
薆要执著 发表于 2021-2-7 16:44
你应该在黑月的官方git上提iss修复问题  这样黑月就更新了

求最新版的黑月安装包不知道有没有呢

点评

https://125.confly.eu.org/forum.php?mod=viewthread&tid=14532031&highlight=黑月   广东省江门市  发表于 2021-2-7 18:15
回复 支持 反对

使用道具 举报

签到天数: 20 天

9
发表于 2021-2-8 00:22:10 | 只看该作者   浙江省绍兴市
支持一下
回复 支持 反对

使用道具 举报

结帖率:94% (29/31)

签到天数: 4 天

10
发表于 2021-2-22 08:56:52 | 只看该作者   安徽省合肥市
这个不错下来备用
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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