Lua字符串操作
我正在尝试找到一种方法,但目前还没有成功,将一个非常长的字符串添加一个新行("\n")。
有没有一个函数可以在每x个字符后插入一个新行?基本上,我需要在每95个字符后添加一个新行。以下是我正在使用的文本:
备忘录
主题:主题
1)Nam fabulas mnesarchum comprehensam ne,cu ullum euismod consulatu usu。Eam alii lobortis voluptatum id,denique eligendi pertinax quo ne。Vis congue eirmod ut。Duo probo soleat ex。Elit pertinax abhorreant eu his,ipsum dicam dissentiunt pri id。Kasd erant dolorum id sed,ei vim partem deseruisse,ne mea dico tantas alienum。
2)Has cu facilisis mediocritatem。Fabellas lucilius vim ex。Mei simul omnium et,wisi vidit ut ius。Ad has erat honestatis。Malis animal aliquid id usu。
3)Nulla utinam appellantur cu qui,scripta sententiae disputando eu nam,ut pri unum labore。Odio wisi torquatos sea cu。Ut detracto torquatos repudiandae pri。Vim puto solum epicurei at。Per nonummy perpetua similique te,odio platonem ut pri。Mei indoctum prodesset in,eam nisl quaerendum at。
4)At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident,similique sunt in culpa qui officia deserunt mollitia animi,id est laborum et dolorum fuga。Et harum quidem rerum facilis est et expedita distinctio。Nam libero tempore,cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus,omnis voluptas assumenda est,omnis dolor repellendus。
这个代码将直接输出长度小于 95 个字符的行,并将长度大于 95 个字符的行分割成 94 个字符的块并加上一个换行符。它不会在空格处分割,这留给你自己练习。
local fout = io.output(os.getenv('userprofile').. '\\desktop\\temp.txt', 'w+');
for str in string.gmatch(text, '(.-\n)') do
if str:len() > 95 then
while str:len() > 95 do
local s = str:sub(1, 94)
fout:write(s.. '\n')
str = str:sub(94)
end
else
fout:write(str)
end
end
fout:flush(); fout:close();
很简单!
local text = io.open'memorandum.txt':read'*a' -- 从文件中加载文本
local n0, width = 0, 80
text = text:gsub('()(%s)',
function(n, c)
c = (n-n0 > width) and '\n' or c
n0 = (c == '\n') and n or n0
return c
end)
io.open('memorandum2.txt','w'):write(text) -- 将更正后的文本保存到文件中
我解释问题为:我想将文本分成每行最多95个字符,尽可能接近该限制的行,并在空格上断开。
我忽略了其他答案中的文件 IO。下面是代码:
-- 第二个参数是控制换行的位置,如果没有指定,默认为80。
-- 如此调用:breakAt(longstring, 95)
local function breakAt(str, lineLength)
local lineLength = lineLength or 80
-- 对于大型文本操作来说,使用数组更有效率。
local out = {}
-- 匹配没有换行符的行,保存原始的换行符。
for line, breaks in str:gmatch('([^\n]+)(\n+)') do
local count = 0
-- 使用 '*' 匹配空格,以允许行末的最后一个单词没有邻近的空格。
for word, whitespace in line:gmatch('(%S+)(%s*)') do
count = count + #word
if count > lineLength then
-- 如果这个单词跨越了 lineLength 的边界,将最后一个单词的空格用换行符替换。
out[#out] = '\n'
-- 当前单词将会成为新一行的第一个单词。
count = #word
end
count = count + #whitespace
table.insert(out, word)
table.insert(out, whitespace)
end
table.insert(out, breaks)
end
return table.concat(out)
end
这将在空格上分割字符串,以实现最大化每行单词数量的效果。
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
尝试使用
print(s:gsub("("..string.rep(".",95)..")","%1\n"))。但是我怀疑你想对每一行进行操作,而不是处理整个文本。