精华内容
下载资源
问答
  • lua文件操作

    千次阅读 2017-03-05 11:59:32
    (1) 读取文件中所有的内容 local input = io.open("hello.txt","rb") --打开文件hello.txt 以读的方式打开 hello...local data = input:read("*a") --从文件开始读取所有的数据 input:close() --关闭文件 print(dat


    (1) 读取文件中所有的内容

    local input = io.open("hello.txt","rb")  --打开文件hello.txt 以读的方式打开  hello.txt是已经存在的文件

    local data = input:read("*all")           --从文件的头开始读取所有的数据
    input:close()                                       --关闭文件

    print(data)                                          --打印出所有的数



    (2) 一行一行的读取文件内容

    local input = io.open("hello.txt","rb")          --打开文件hello.txt 以读的方式打开  hello.txt是已经存在的文件
    while true  do
       local data = input:read("*line")           --*line  表示从文件中读取一行
       if data == nil then
          break                                               --发现读取的内容为nil后说明到了文件的最后  跳出循环
       end
       print(data)                                              --打印出所有的数据
    end
    input:close()    
                                                --关闭文件



    展开全文
  • Lua文件操作自定义上传头像

    千次阅读 2016-03-22 17:15:31
    先简单介绍一下被迫使用Lua的IO的情境: 游戏支持玩家自定义上传头像,在排行榜中会显示玩家列表(包括本服、跨服),原有的做法是先检测CCUserDefault中是否存在指定图片的key以及它的状态。然后在下载头像、下载...

    先简单介绍一下被迫使用Lua的IO的情境:

    游戏支持玩家自定义上传头像,在排行榜中会显示玩家列表(包括本服、跨服),原有的做法是先检测CCUserDefault中是否存在指定图片的key以及它的状态。然后在下载头像、下载完成后设置对应的状态。这样导致的一个问题就是CCUserDefault的读写完全失效了。整个游戏下载的补丁包判断和其它判断就完全失效了,不得卸载游戏后重装。个人目前的推测是由于多线程引起的,暂时没有有效的依据

    下载头像使用的是libcurl,嗯,又是它,在做项目这么久的过程中,发现它其实有很多地方比较坑。其中有一点我一直没搞明白,同样的一样地址,系统自带的浏览器(IOS、Android均支持)就能正常返回,而游戏中使用libcurl去下载就是死活返回errcode 28 (CURLE_OPERATION_TIMEDOUT),libcurl我设置的是60秒超时,绝对足够了

     

    之后我做了优化,在设置自定义头像的时候,先检测本地是否有该文件,如果有直接就设置了,如果没有就放置在加载队列中,等下载完成后再设置头像,只开一条线程去下载图片。(同一张头像的url只请求一次,也避免对CCUserDefault的读写操作)。

     

    通过libcurl下载一个“头像id.jpg.partial”的文件,然后下载完成重新写一个“头像id.jpg”的文件。在下载完成的时候,只做了简单的一个文件大小判断,如果文件小于300B就认为它是有问题的,直接删除相应的文件

    -- filePath为当前下载完成的临时头像文件路径
    local targetIconUrl = string.gsub(filePath, ".partial", "")
     
    local inpFile = io.open(filePath, "rb")
    local outFile = io.open(targetIconUrl, "wb")
     
    if inpFile ~= nil then
        -- 最大8KB的内存
        local buffSize = 2^13
        while true do 
            local bytes = inpFile:read(buffSize)
            if not bytes then
                break
            end
    
            outFile:write(bytes)
        end
    
        inpFile:close()
    end
    
    -- 获取下载icon的大小
    if outFile ~= nil then
        local current = outFile:seek()
        local fileSize = outFile:seek("end")
        outFile:seek("set", current)
    
        cclog("==> targetIconUrl : "..tostring(targetIconUrl)..", fileSize : "..tostring(fileSize))
    
        outFile:close()
    
        -- 小于300字节均认为不正常的数据
        if fileSize < 300 then
            FileUtil:DeleteFile_(filePath)
            FileUtil:DeleteFile_(targetIconUrl)
    
            self:DownloadNextIconHandler()
            do return end
        end
    end


    本来,直接调用对应的FileUtil中的FileRename方法就可以实现文件的重命名,但是线上的版本没有导出相应的方法,导致目前只能通过Lua的IO来实现。

    最近再看lua的源码时,才真正意识到luaconf.h中定义的 LUAI_MAXCSTACK 是 cclosure的upvalue上限,而lua内存上限似乎没有找到明确的代码。

    而file:read调用的是liolib.c



     

    底层通过调用fread方法来获得文件的内容,默认每次最多读取512(LUAL_BUFFERSIZE的值)

     

    然后调用file:seek(“end”)来获取文件大小


    底层调用feek方法来实现

     

    本以为到这里就结束了,实际上我遇到另外一个问题。如果头像因审核问题被删除了,导致404,结果底层libcurl方法没有判断http status code,直接判断CURLcode的值是否为CURLE_OK,导致将得到的文件直接写入了。但我从崩溃的日志上得到的信息是,小米4这台设备上获得的文件大小为18378


    之后就直接报

    invalid address or address of corrupt block 0x7c0eaa40 passed to dlfree 

    之后我修改了libcurl下载文件的代码,但要等下次打整包的时候才能用上


     

    把不是jpeg的图片直接对CCSprite进行路径赋值的时候就over了,所以需要一个检测文件是否为jpeg的方法

    -- 判断资源是否为jpg
    function PCUtils:CheckIsJpeg(filePath)
        local isJpeg = false
    
        if FileUtil:CheckFileExistWithFullPath(filePath) then
            local inpFile = io.open(filePath, "rb")
            -- 读取前三位
            local bytes = inpFile:read(3)
            if bytes then
                local fileHeadIden = ""
                for _, b in ipairs{string.byte(bytes, 1, -1)} do
                    local val = string.format("%02X", b)
                    fileHeadIden = fileHeadIden..val
                end
    
                if string.upper(fileHeadIden) == "FFD8FF" then
                    isJpeg = true
                else
                    cclog("==> filePath : "..tostring(filePath)..", fileHeadIden : "..tostring(fileHeadIden))
                end
            end
    
            inpFile:close()
        end
    
        return isJpeg
    end

    读取文件的前三位,转换为16进制,然后对比JPEG的头部,判断是否为JPEG格式的文件,这个是我想起自己之前写过的一篇文章《node.js获取图片文件的真实类型

    文件一些方法和代码,比如为何是r + b,以及2^13(8KB内存)这种技巧,都是参考《Lua程序设计 第二版》第21章  I/O库,网上应该有中文版的PDF下载,自行搜索吧…

    本文参考:

    lua cclosure 的 upvalue 数量限制

    Lua编码的那些陷阱

    Lua2.4 内存分配 mem.c

    原文地址:http://www.cnblogs.com/meteoric_cry/p/4668857.html

    展开全文
  • 使用python将excel转为lua文件

    千次阅读 2017-07-25 19:27:48
    excel表格格式 脚本文件目录结构 windows bat命令,用于快速执行excel2lua.py脚本 excel2lua脚本代码import sys ...curpath = os.path.dirname(os.path.abspath(sys.argv[0]))# 文件头描述格式化文本 lua_file_hea

    excel表格格式
    说明:
    1.前三行分别为:字段中文解释、字段名、字段类型
    2.程序不用的字段,加”_”前缀,不会生成进lua文件里
    3.策划填数值的时候,偶尔会遗漏数据,当存在空值时,依据字段类型,填上默认值。
    4.支持一个字段填上多组数据,如”进阶消耗”字段,自定义类型”table”,代表{ {道具1id,道具1数量},{道具2id,道具2数量}}, … }
    excel2lua截图1

    脚本文件目录结构
    excel2lua截图2

    windows bat命令,用于快速执行excel2lua.py脚本
    excel2lua截图3

    excel2lua.py脚本代码

    import sys
    import os
    import xlrd
    import re
    
    # 当前脚本路径
    curpath = os.path.dirname(os.path.abspath(sys.argv[0]))
    
    # 文件头描述格式化文本
    lua_file_head_format_desc = '''--[[
    
            %s
            exported by excel2lua.py
            from file:%s
    
    --]]\n\n'''
    
    # 将数据导出到tgt_lua_path
    def excel2lua(src_excel_path, tgt_lua_path):
        print('[file] %s -> %s' % (src_excel_path, tgt_lua_path))
        # load excel data
        excel_data_src = xlrd.open_workbook(src_excel_path, encoding_override = 'utf-8')
        print('[excel] Worksheet name(s):', excel_data_src.sheet_names())
        excel_sheet = excel_data_src.sheet_by_index(0)
        print('[excel] parse sheet: %s (%d row, %d col)' % (excel_sheet.name, excel_sheet.nrows, excel_sheet.ncols))
    
        # excel data dict
        excel_data_dict = {}
    
        # col name list
        col_name_list = []
    
        #col val type list
        col_val_type_list = []
    
        # ctype: 0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error
    
        # 遍历第二行的所有列 保存字段名
        for col in range(0, excel_sheet.ncols):
            cell = excel_sheet.cell(1, col)
            col_name_list.append(str(cell.value))
            assert cell.ctype == 1, "found a invalid col name in col [%d] !~" % (col)
    
        # 遍历第三行的所有列 保存数据类型
        for col in range(0, excel_sheet.ncols):
            cell = excel_sheet.cell(2, col)
            col_val_type_list.append(str(cell.value))
            assert cell.ctype == 1, "found a invalid col val type in col [%d] !~" % (col)
    
        # 剔除表头、字段名和字段类型所在行 从第四行开始遍历 构造行数据
        for row in range(3, excel_sheet.nrows):
            # 保存数据索引 默认第一列为id
            cell_id = excel_sheet.cell(row, 0)
    
            assert cell_id.ctype == 2, "found a invalid id in row [%d] !~" % (row)
    
            # 检查id的唯一性
            if cell_id.value in excel_data_dict:
                print('[warning] duplicated data id: "%d", all previous value will be ignored!~' % (cell_id.value))
    
            # row data list
            row_data_list = []
    
            # 保存每一行的所有数据
            for col in range(0, excel_sheet.ncols):
                cell = excel_sheet.cell(row, col)
                k = col_name_list[col]
                cell_val_type = col_val_type_list[col]
    
                # ignored the string that start with '_'
                if str(k).startswith('_'):
                    continue
    
                # 根据字段类型去调整数值 如果为空值 依据字段类型 填上默认值
                if cell_val_type == 'string':
                    if cell.ctype == 0:
                        v = '\'\''
                    else:
                        v = '\'%s\'' % (cell.value)
                elif cell_val_type == 'int':
                    if cell.ctype == 0:
                        v = -1
                    else:
                        v = int(cell.value)
                elif cell_val_type == 'float':
                    if cell.ctype == 0:
                        v = -1
                    else:
                        v = float(cell.value)
                elif cell_val_type == 'table':
                    if cell.ctype == 0:
                        v = '{}'
                    else:
                        v = cell.value
                else:
                    v = cell.value
    
                # 加入列表
                row_data_list.append([k, v])
    
            # 保存id 和 row data
            excel_data_dict[cell_id.value] = row_data_list
    
        # 正则搜索lua文件名 不带后缀 用作table的名称 练习正则的使用
        searchObj = re.search(r'([^\\/:*?"<>|\r\n]+)\.\w+$', tgt_lua_path, re.M|re.I)
        lua_table_name = searchObj.group(1)
        # print('正则匹配:', lua_table_name, searchObj.group(), searchObj.groups())
    
        # 这个就直接获取文件名了
        src_excel_file_name = os.path.basename(src_excel_path)
        tgt_lua_file_name = os.path.basename(tgt_lua_path)
    
        # file head desc
        lua_file_head_desc = lua_file_head_format_desc % (tgt_lua_file_name, src_excel_file_name)
    
        # export to lua file
        lua_export_file = open(tgt_lua_path, 'w')
        lua_export_file.write(lua_file_head_desc)
        lua_export_file.write('%s = {\n' % lua_table_name)
    
        # 遍历excel数据字典 按格式写入
        for k, v in excel_data_dict.items():
            lua_export_file.write('  [%d] = {\n' % k)
            for row_data in v:
                lua_export_file.write('   {0} = {1},\n'.format(row_data[0], row_data[1]))
            lua_export_file.write('  },\n')
    
        lua_export_file.write('}\n')
    
        lua_export_file.close()
    
        print('[excel] %d row data exported!~' % (excel_sheet.nrows))
    
    # Make a script both importable and executable (∩_∩)
    if __name__ == '__main__':
        if len(sys.argv) < 3:
            print('python excel2lua.py <excel_input_path> <lua_output_path>')
            exit(1)
    
        excel2lua(os.path.join(curpath, sys.argv[1]), os.path.join(curpath, sys.argv[2]))
    
        exit(0)

    执行bat命令,结果截图
    excel2lua截图4

    生成的lua文件截图
    excel2lua截图5
    excel2lua截图6

    检测lua文件数据的有效性
    excel2lua截图7

    展开全文
  • 第一次把游戏移到android上,出了can not get file data of SceneManager.lua这个问题,我看了,是在相应目录下,琢磨了很久发现assert里这个文件是以sceneManager.lua小写的s打的,修改后OK 转载于:...

    第一次把游戏移到android上,出了can not get file data of SceneManager.lua这个问题,我看了,是在相应目录下,琢磨了很久发现assert里这个文件是以sceneManager.lua小写的s打头的,修改后OK

    转载于:https://www.cnblogs.com/wenlove/archive/2013/02/08/2909315.html

    展开全文
  • Lua1.0 文件简介

    2015-11-02 20:33:00
    源文件简介: floatingpoint.h 空文件,没什么用。 ...hash.h 最大的结构的保存位置,Lua 中需要内存回收的都放在它里面,比如 string 和 关联数组。...inout.h 从文件名可以看出是输入...lua.h, lualib.h: Lua ...
  • 写了个脚本列出lua源码C文件头部的注释,作为我有一搭没一搭以Lua为对象学习编译原理的开端。 lua5.1.4全部的源码有35个C文件,17216行代码。每个文件基本的功能如下 ./output_lua_sources_comments.sh ~/...
  • 我拿到了词库后发现词库中大概有8000+个词,其中包括很多重复的,还有很多有着包含关 系的词;  什么是包含词呢? 看如下例子:  我们知道在DFA算法读取敏感词后如果存在这种情况:  词1: "a...
  • Lua文件操作

    2015-07-22 22:22:00
    先简单介绍一下被迫使用Lua的IO的情境: 游戏支持玩家自定义上传头像,在排行榜中会显示玩家列表(包括本服、跨服),原有的做法是先检测CCUserDefault中是否存在指定图片的key以及它的状态。然后在下载头像、下载...
  • Lua 读取Csv文件,更方便的使用数据 这篇文件的数据,写了一个用lua解析csv成lua配置文件,方便程序调用,如果用cocos2dx lua写程序的话,可以这样子来用cha.MissionEntry[1].Index 这里是一段全lua代码: --读取...
  • Lua文件操作 先简单介绍一下被迫使用Lua的IO的情境: 游戏支持玩家自定义上传头像,在排行榜中会显示玩家列表(包括本服、跨服),原有的做法是先检测CCUserDefault中是否存在指定图片的key以及它的...
  • Lua参考

    2021-03-27 22:43:44
    Lua 环境安装 Linux 系统上安装 curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz ...E:\javasoftware\Lua5.1,在文件头指定解释器,解释器忽略#标记内容 –,单行注释 –[[…–]],–[=[…]=],多行注释 变量
  • 九、加入lua,配置响应信息:  1.修改配置文件plugin.config  加入:background_fetch.so  2.修改配置文件remap.config  map http://www.test100.com/ ...
  • lua手游

    2020-06-24 18:32:02
    lua手游一般是cocos2d引擎+lua,...luac和luajit同样是.luac后缀,但是文件头不同,对其所使用的反编译方法也不同,所以需要特别注意。 luac文件头为:0x1B 0x4C 0x75 0x61 0x51 luacjit文件头为:文件头是0x1B 0x4C 0
  • Lua: C++调用Lua

    2020-11-28 16:40:02
    按照这个链接中的方法做的,具体过程略有不同 ...一、将Lua源码做为静态库导入VS ...首先打开Lua的源代码压缩包,解压,其中有doc,src,makefile和readme四个文件,src就是source的缩写,打开src。 Lua的底层其实是C语言
  • nginx与lua的执行顺序和步骤说明 转载由:http://www.mrhaoting.com/?p=157#comment-588 一、nginx执行步骤 nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系...
  • Lua语言基础

    2020-02-23 17:39:55
    lua 基础 用 C 语言编写,编译后仅仅100k左右,方便...文件头 #!/user/local/bin/lua 注释 --单行注释 --[[ 多行注释 --]] 变量 -- local 表示局部变量,作用域到 end 为止,不写 local 表示全局变量 local a pr...
  • Nginx Lua API 和一般的Web Server类似,我们需要接收请求、处理并输出响应。而对于请求我们需要获取如请求参数、请求、Body体等信息;而对于处理就是调用...1. openResty.conf配置文件 server { listen 80; ...
  • vs c++使用lua

    2017-10-27 11:13:05
    一、下载lua,我下载的是lua.5-3-4 二、编译生成lua.lib文件 ...右击相应的文件,“属性”---》“预编译”---》“预编译”,选择“不使用预编译”。 再运行,就会编译成功,生成lua.lib文件 三、使用lua
  • 编译LUA源码

    2018-03-15 22:00:29
    在源文件中添加src文件夹下的所有文件,然后移除lua.c 和 luac.c这两个文件,右键项目-&gt;生成。然后跟踪到项目的文件夹。这个时候在Debug目录下应该就有我们编译好的Lua53.lib库了。2.解释器...
  • Lua中使用自定义类——tolua++工具使用(下集)     笨木头花心贡献,啥?花心?不呢,是用心~ ...上回说到,把LuaCocos2d.cpp文件拷到我们的lua工程里,然后,编译。   大功告成……啊才怪啊~!
  • Lua是一个可以嵌入到Nginx配置文件中的动态脚本语言,从而可以在Nginx请求处理的任何阶段执行各种Lua代码。刚开始我们只是用Lua 把请求路由到后端服务器,但是它对我们架构的作用超出了我们的预期。下面就讲讲我们所...
  • lua——环境配置

    2019-10-02 07:02:47
    一、官网源码url: ... ...(1)生成lua文件 1.官网上下载lua源码 2.用vs新建win32静态库项目(去选预编译,本人的项目命名为“lua”) 3.添加源码中所有头文件和除lua.c、luac.c以外的...
  •   ...此脚本目前支持这些后缀:.cc, .sh, .java, .cpp, .h, .hpp, .py, .lua 自动创建文件头部注释的脚本 1. 把脚本保存为file_format.vim, 并存放在~/.vim/macros/目录下; 2. 编辑~/.vimr...
  • c语言与Lua通信

    2020-07-31 14:53:35
    c语言与Lua通信 1.C语言调用lua函数(ubuntu,栈方法) ...c代码: ...操作lua表需要,链接头文件,暂时没有链接出来 lua代码: 中间遇到的问题: 1.gcc编译错误,找不到lua库. 解决方法: 原来在ubuntu下lua
  • luac 格式分析与反编译

    万次阅读 2018-10-09 10:31:00
    前言 测试某游戏时,游戏加载的是luac脚本: 文件格式 - 010editor官方bt只能识别luac52版本 ...文章目录前言luac51格式分析Luac文件格式文件头格式函数体luac.exe存储luac过程分析luac反编译获取lua51 vmlu...
  • lua5.1字节码解析

    2021-01-31 14:32:43
    lua5.1字节码文件头的长度为12字节,在我的环境里(Win7 64位,VS下编译为Win32应用)如下: 1b4c 7561 5100 0104 0404 0800 其中第1-4字节为:"\033Lua"; 第5字节标识lua的版本号,lua5.1为 0x51; 第6字节为官方中...
  • C++调用lua示例

    千次阅读 2019-05-15 10:54:51
    1. lua源码下载 ...b)项目工程代码只需要包含lua.hpp即可,冲突的main函数更改个名字即可,所有的.c文件设置不使用编译 3. lua示例 mystr = "hello world" my_table = {name = "yxli8", id = 1...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 131
精华内容 52
热门标签
关键字:

lua文件头