加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

是否有一种有效而优雅的方法可以在Lua中截断这样的数字?

发布时间:2020-12-14 21:45:15 所属栏目:大数据 来源:网络整理
导读:我想做的事 我想做的事情非常简单.我想用Lua来检查Plist文件中的行. 假设如果Plist中的一行是整数 -1.00 / integer,我需要将.00关闭以使其为 integer -1 / integer. 我做了什么 我使用函数来读取整个文件内容,并逐行检查和替换. local function doLineClean(
我想做的事

我想做的事情非常简单.我想用Lua来检查Plist文件中的行.

假设如果Plist中的一行是<整数> -1.00< / integer>,我需要将.00关闭以使其为< integer> -1< / integer>.

我做了什么

我使用函数来读取整个文件内容,并逐行检查和替换.

local function doLineClean( cont )
    newcont = ''
    string.gsub( cont,"(.-)r?n",function(line)
        if string.match( line,"<integer>.-<%/integer>" ) then
            string.gsub( line,"<.->(.-)<.->",function(v)
            a,b = string.find(v,"%..*")
            if a and b then
                v = string.sub( v,a - 1 )
            end
            line = "tt<integer>"..v.."</integer>"
            end  )
        end
        newcont = newcont .. line .. 'n'
    end  )
    return newcont
end

我的问题

是否有更高效,更优雅的方式来完成同样的工作?

解决方法

首先,请注意Lua的字符串模式不是完整的正则表达式.它们更有限,功能更弱,但通常足够(如本例所示).

为什么不是一个更简单的替代品,如下所示?

local s1 = [[
<integer>3</integer>
<integer>3.12</integer>
<integer>-1.00</integer>
<integer>-1.99</integer>
<float>3.14</float>
]]

local s2 = s1:gsub('(<integer>%-?%d+)%.%d+','%1')
print(s2)
--> <integer>3</integer>
--> <integer>3</integer>
--> <integer>-1</integer>
--> <integer>-1</integer>
--> <float>3.14</float>

这发现:

>文本<整数>,
>可选后跟一个文字连字符(% – ?)
>后跟一个或多个数字字符(%d)
>后跟一个文字句点(%.)
>后跟一个或多个数字字符(%d)

并将其替换为第一次捕获(上面1-3的内容).

请注意,如果您的浮点数不能包含前导数字(例如<整数> .99< / integer>)或科学记数法(例如< integer> 1.34e7< / integer>),则无法使用此功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读