1

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

我找不到任何足够好的搜索结果,如果已经回答,将不胜感激。

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

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

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

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

4

2 回答 2

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.

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

于 2019-04-21T22:10:17.783 回答
0

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

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

更新(2019 年 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
于 2019-04-21T22:15:05.040 回答