开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 3364|回复: 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)

点评

更新一下,在顶楼   广东省江门市  发表于 2021-2-8 10:39

评分

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

查看全部评分


结帖率:100% (9/9)

签到天数: 5 天

 楼主| 发表于 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 天

发表于 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)
返回 (“”)

点评

不错,这个方法比较全面   广东省江门市  发表于 2021-2-7 23:41
回复 支持 反对

使用道具 举报

结帖率:83% (39/47)

签到天数: 20 天

发表于 2021-2-7 20:31:23 | 显示全部楼层   福建省宁德市
为了能更快捷地访问GitHub 顺手写了个hosts配置类
https://bbs.125.la/forum.php?mod=viewthread&tid=14665792
回复 支持 反对

使用道具 举报

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

点评

+100 好评!   广东省江门市  发表于 2021-2-8 00:11
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)
发表于 2023-10-19 15:08:05 | 显示全部楼层   湖北省武汉市
kklotebo 发表于 2023-9-24 00:52
没那么麻烦,自己也遇到这个坑了。自己写了一个
目前看来运行还可以

128个字符内没有换行符,会继续读取128个。
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)
发表于 2023-9-24 00:52:02 | 显示全部楼层   湖北省武汉市
没那么麻烦,自己也遇到这个坑了。自己写了一个
目前看来运行还可以

[JavaScript] 纯文本查看 复制代码
.版本 2

.子程序 读入一行_修复版, 文本型, 公开
.参数 文件号, 整数型, , 该文件号由“打开文件”命令所返回的整数
.参数 文件长度, 长整数型
.局部变量 文件字节集, 字节集
.局部变量 记录位置, 整数型, , "3"
.局部变量 换行处理, 字节集
.局部变量 局部读取长度, 整数型
.局部变量 实际位置, 整数型

记录位置 [1] = 取读写位置 (文件号)
.如果真 (记录位置 [1] = -1)
    移到文件尾 (文件号)
    返回 (“”)
.如果真结束
换行处理 = {  }
.循环判断首 ()
    .如果 (文件长度 > 记录位置 [1] + 128)
        局部读取长度 = 128
    .否则
        局部读取长度 = 文件长度 - 记录位置 [1]
    .如果结束
    文件字节集 = 读入字节集 (文件号, 局部读取长度)
    ' 输出调试文本 (到文本 (文件字节集))
    记录位置 [2] = 寻找字节集 (文件字节集, { 13 }, 1)
    记录位置 [3] = 寻找字节集 (文件字节集, { 10 }, 1)
    .如果 (记录位置 [2] = -1 且 记录位置 [3] = -1)
        换行处理 = 换行处理 + 文件字节集
        记录位置 [1] = 记录位置 [1] + 局部读取长度
    .否则
        .如果 (记录位置 [2] > 记录位置 [3])
            实际位置 = 记录位置 [2]
        .否则
            实际位置 = 记录位置 [3]
        .如果结束
        移动读写位置 (文件号, 1, 记录位置 [1])
        换行处理 = 换行处理 + 读入字节集 (文件号, 实际位置)
        跳出循环 ()
    .如果结束

.循环判断尾 (真)

返回 (子文本替换 (子文本替换 (到文本 (换行处理), 字符 (13), , , , 真), 字符 (10), , , , 真))

点评

128要改为参数输入,每行超出128字符就会无法得到完整一行   广东省江门市  发表于 2023-9-27 11:55
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 12 天

发表于 2022-4-5 22:30:25 | 显示全部楼层   山西省晋城市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 2 天

发表于 2022-3-26 19:03:07 | 显示全部楼层   上海市上海市
欢迎常来帮助新人,谢谢~
回复 支持 反对

使用道具 举报

结帖率:81% (26/32)

签到天数: 2 天

发表于 2022-2-22 05:00:54 | 显示全部楼层   上海市上海市
大神,请收下我的膝盖
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2021-6-30 01:07:13 | 显示全部楼层   江苏省扬州市
hmyroot 发表于 2021-2-7 18:27
最新_修复删除换行符问题
[e=4].版本 2
.支持库 spec

大佬QQ 多少找你有个小事
回复 支持 反对

使用道具 举报

结帖率:94% (29/31)

签到天数: 7 天

发表于 2021-2-22 08:56:52 | 显示全部楼层   安徽省合肥市
这个不错下来备用
回复 支持 反对

使用道具 举报

签到天数: 19 天

发表于 2021-2-8 00:22:10 | 显示全部楼层   浙江省绍兴市
支持一下
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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