分隔/计数字符串中的行

时间:2019-04-21 20:28:15

标签: lua computercraft

我目前正在Lua为computerCraft编程概念证明文本编辑器;一种功能是行计数。如何计算字符串中的行数,或者至少计算换行符? 理想情况下,显示器/终端的侧面也应该有行号,它可以使用相同的代码。

我找不到足够好的搜索结果,如果已经回答了一个链接,我将不胜感激。

我不知道该怎么做,理想的结果是将所有文本行分隔为不同条目的数组;这将解决两个问题;但可能会有更多的“定制”选项

希望我能在这样的帮助下实现输出...

1 |while true do
2 |sleep(0)
3 |write("Example")
4 |write("Script\n\n")
5 |end
:
PPPe Code Editor ~ 5 lines

...当事物发生变化时刷新

2 个答案:

答案 0 :(得分:0)

以字符串开头:

local str = "One sentence.\nAnother sentence.\nThe end."

然后:

local lines = {}
for line in (str):gmatch("[%a+%s]+") do 
    table.insert(lines, line) 
end

for i, line in ipairs(lines) do
    print("Line " .. i .. ": " .. line)
end

这将打印:

Line 1: One sentence.
Line 2: Another Sentence.
Line 3: The end.

您可能需要调整搜索模式以处理其他字符的行,但这对程序员来说是个好习惯。

答案 1 :(得分:0)

您可以使用string.gsub,因为它返回执行的替换次数作为第二个结果:

local _, replacements = string.gsub(text, "\n", "\n")

更新(19/4/22):如果您需要为每行添加行号(最初的问题是关于行计数),那么您仍然可以使用string.gsub,但是您需要提供将对行进行计数的函数,例如:

lines = 1
local text = "1 |"..string.gsub(text, "\n", function(s) lines = lines + 1 return s..lines.." |" end)
print(text)
print(lines)

对于您的文字,将打印:

1 |while true do
2 |sleep(0)
3 |write("Example")
4 |write("Script\n\n")
5 |end
5