【问题标题】:Getting current file name in Lua在 Lua 中获取当前文件名
【发布时间】:2019-06-10 02:36:32
【问题描述】:

如何获取没有路径和.lua的当前文件名?

我试过了:

local info = debug.getinfo(1,'S');
print(info.source);

这就是我得到的:

@data/spells/scripts/10lvl/bakurichimacha.lua
@data/spells/scripts/1000lvl/brave sword attack.lua

如何删除这些部分:

@data/spells/scripts/10lvl/ and .lua
@data/spells/scripts/1000lvl/ and .lua

要打印只是爆奶茶和勇敢的剑攻击?

【问题讨论】:

  • 当然要去掉它们。
  • (即找到最后一个/,去掉该部分和之前的部分,删除最后4个字符.lua)

标签: lua filenames


【解决方案1】:

试试这个:

function get_file_name(file)
      return file:match("^.+/(.+)$")
end

【讨论】:

  • 好吧,现在打印出来了:bakurichimacha.lua 和勇敢的剑攻击.lua
  • 另外,Windows 呢?
  • @valisstillwithMonica 使用字符类来匹配任一斜线:[/\\]
【解决方案2】:

你可以使用string.match函数

local filename = function()
  local str = debug.getinfo(2, "S").source:sub(2)
  return str:match("^.*/(.*).lua$") or str
end
print(filename());

【讨论】:

    【解决方案3】:

    虽然接受的@kingjulian 答案似乎在大多数情况下都有效,但对于无路径文件名参数它会失败。 例如。 aTestFile.lua 等

    我稍微修改了正则表达式以包含这些缺失的场景

    function get_file_name(file)
          return file:match("[^/]*.lua$")
    end
    

    测试here

    获取除扩展名.lua之外的唯一文件名

    function get_file_name(file)
          local file_name = file:match("[^/]*.lua$")
          return file_name:sub(0, #file_name - 4)
    end
    

    【讨论】:

    • 并非所有文件扩展名都是 3 个字符。
    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    相关资源
    最近更新 更多