file – 在Lua中处理CR行结尾

我正在尝试使用文件读取带有CR行结尾的文件:read方法似乎由于某种原因而起作用.文件内容如下所示:
ABCDEFGH
12345
##
6789

我希望它与所有类型的行结尾一致.每次我尝试读取文件时,它都会返回文件中的最后一行与前一行中任何尾随字符的连接,这些字符的位置大于最后一行中最后一个字符的位置.这就是我的意思:

> file=io.open("test.lua","rb")
> function re_read(openFile)
     openFile:seek("set");
     return openFile:read("*a");
  end
> =re_read(file) -- With CR
67895FGH

> =re_read(file) -- With CRLF
ABCDEFGH
12345
##
6789

> =re_read(file) -- with LF
ABCDEFGH
12345
##
6789

>

如您所见,返回的字符串是最后一个字符串加上前一行中的5,加上第一行的FGH.将跳过任何比最后一行短的行.

我的目标是使用file:line()方法逐行读取文件.我希望如果找到file:read的’fix’,那么它可以应用于file:lines().

解决方法

在仅有CR的情况下,re_read实际上按预期工作:它返回由CR分隔的行.但是当解释器显示它时,它将CR字符解释为“返回到行的开头”.所以这里是结果如何逐行改变:
ABCDEFGH
12345FGH
##345FGH
67895FGH

编辑:这里是逐个字符,带有“虚拟光标”(|).

|
A|
AB|
ABC|
ABCD|
ABCDEF|
ABCDEFGH|
|ABCDEFGH
1|BCDEFGH
12|CDEFGH
123|DEFGH
1234|EFGH
12345|FGH
|12345FGH
#|2345FGH
##|345FGH
|##345FGH
6|#345FGH
67|345FGH
678|45FGH
6789|5FGH

证明:

> s = "ABCDEFGH\r12345\r##\r6789"
> =s
67895FGH

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...