|
|
.版本 2
.子程序 逐行读取文本, , , 使用打开文件号+寻找字节集方式逐行读取
.参数 文件路径, 文本型
.局部变量 文件号, 整数型
.局部变量 缓冲区, 字节集
.局部变量 换行位置, 整数型
.局部变量 一行内容, 文本型
.局部变量 已读取位置, 整数型
.局部变量 文件总长度, 整数型
.局部变量 剩余长度, 整数型
.局部变量 读取长度, 整数型
文件号 = 打开文件 (文件路径, #读入, )
如果真 (文件号 = 0)
输出调试文本 ("文件打开失败!")
返回
如果真结束
' 获取文件总长度
移动读写位置 (文件号, #文件尾, 0)
文件总长度 = 取读写位置 (文件号)
移到文件首 (文件号)
已读取位置 = 0
.判断循环首 (已读取位置 < 文件总长度)
' 每次读取一定长度的数据到缓冲区(这里取4096字节)
剩余长度 = 文件总长度 - 已读取位置
读取长度 = 选择 (剩余长度 > 4096, 4096, 剩余长度)
缓冲区 = 读入字节集 (文件号, 读取长度)
' 在缓冲区中寻找换行符 {13,10}
换行位置 = 寻找字节集 (缓冲区, { 13, 10 }, )
.判断循环首 (换行位置 ≠ -1)
' 截取从缓冲区开头到换行符之前的内容,作为一行
一行内容 = 到文本 (取字节集左边 (缓冲区, 换行位置 - 1))
输出调试文本 (一行内容) ' 这里可以替换为你的处理逻辑
' 更新已读取位置(加上这一行的长度和换行符的2个字节)
已读取位置 = 已读取位置 + 换行位置 + 1 ' 换行位置是{13}的位置,+1跳过{13,10}
' 移动文件读写位置到下一行开头
移动读写位置 (文件号, #文件首, 已读取位置)
' 重新读取缓冲区
剩余长度 = 文件总长度 - 已读取位置
如果真 (剩余长度 ≤ 0)
跳出循环 ()
如果真结束
读取长度 = 选择 (剩余长度 > 4096, 4096, 剩余长度)
缓冲区 = 读入字节集 (文件号, 读取长度)
换行位置 = 寻找字节集 (缓冲区, { 13, 10 }, )
.判断循环尾 ()
' 如果缓冲区中没有找到换行符,说明已到文件末尾或剩余内容不足一行
.如果真 (换行位置 = -1 且 取字节集长度 (缓冲区) > 0)
' 处理最后一行(没有换行符结尾的内容)
一行内容 = 到文本 (缓冲区)
输出调试文本 (一行内容)
已读取位置 = 文件总长度
.如果真结束
.判断循环尾 ()
关闭文件 (文件号)
|
|