【问题标题】:How to split string values in lua. Error如何在 lua 中拆分字符串值。错误
【发布时间】:2012-04-15 05:06:56
【问题描述】:

所以我试图只拆分我通过 csv 文件读入的字符串。该字符串包含几个值,例如 first_name、last_name、email_address 等...我想使用 split 函数将所有这些值分配给我自己的特定变量。到目前为止,这就是我所拥有的:

first_name, last_name, email_address, street_address, city, state = split(line, ",")
person_record = {first_name, last_name, email_address, street_address, city, state}

我在 lua 中遇到错误,提示“尝试调用全局 'split'(一个 nil 值)

我用谷歌搜索了错误消息,但没有成功。我是否可能必须包含一个库才能使用拆分功能????

或者我只是使用了错误的拆分功能。非常感谢任何帮助:/

【问题讨论】:

    标签: string csv lua split


    【解决方案1】:

    我不相信 Lua 具有 split 功能,因为您正在尝试使用它。 This page 似乎是对如何在 Lua 中拆分(和连接)字符串的彻底总结。

    【讨论】:

    • 这是我了解到你可以在 lua 中拆分的网站。我的问题是尝试以这种方式拆分时出现错误。我只是想知道我是否在语法上做错了或者......?
    • 你读过那个文件吗?没有split 功能。你必须写一个。该页面上提供了几个实现。开头段落(“加入字符串列表”之前的内容)只是对目标操作的描述,而不是函数参考。
    • 德普。我想我只是虽然底部是某人制作的一个示例并且有一个内置的。谢谢。
    【解决方案2】:

    你可以试试我写的这个类似 python 的拆分实现。

    参数:

    • s -- 要拆分的字符串

    • pattern -- 它是分隔符(字符或字符串)

    • maxsplit -- 最多执行此拆分

    返回包含拆分的表。

    示例:

    split('potato', 't') --> {'po', 'a', 'o'}

    split('potato', 't', 1) --> {'po', 'ato'}

    split('potato', 'ta') --> {'po', 'to'}

    split('potato', 'foo') --> {'potato'}

    split = function(s, pattern, maxsplit)
      local pattern = pattern or ' '
      local maxsplit = maxsplit or -1
      local s = s
      local t = {}
      local patsz = #pattern
      while maxsplit ~= 0 do
        local curpos = 1
        local found = string.find(s, pattern)
        if found ~= nil then
          table.insert(t, string.sub(s, curpos, found - 1))
          curpos = found + patsz
          s = string.sub(s, curpos)
        else
          table.insert(t, string.sub(s, curpos))
          break
        end
        maxsplit = maxsplit - 1
        if maxsplit == 0 then
          table.insert(t, string.sub(s, curpos - patsz - 1))
        end
      end
      return t
    end
    

    希望对你有帮助 -^.^- 再见

    【讨论】:

      【解决方案3】:

      您可以从pl.stringx 包中获取split 函数:

      安装penlight 包:

      luarocks install penlight
      

      然后在程序中,就可以使用如下所示的包了:

      local split = require("pl.stringx").split
      local paths = split("/a/b/feature-name/d", "/") 
      -- output: {,a,b,feature-name,d}
      local feature = paths[4] 
      -- output: feature-name
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-28
        • 2018-06-01
        • 1970-01-01
        • 2016-08-25
        • 2015-01-16
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多