lua进阶8-- C++读取lua文件里的三维表
2015-03-06 09:59
423 查看
前面lua进阶里面讲到用C++读取二维表,但是最近又有了新的需求,lua文件里面出现了三维表,自己摸索了一下,终于找到了解决的方式,在这里面与大家分享一下</span>
我的lua文件里面的三维表结构如下
stage = { {m_nId = 105,m_nBoss = 0,m_nScoreList = {300,450,600},m_nRewardList = {230401201,13020801,13010411},m_nDropItemList = {0,0,0}}, {m_nId = 106,m_nBoss = 0,m_nScoreList = {630,840,1050},m_nRewardList = {241801101,14000201,18000201},m_nDropItemList = {14000101,241700301,230501301}}, {m_nId = 107,m_nBoss = 0,m_nScoreList = {735,980,1225},m_nRewardList = {230400201,230400411,230500101},m_nDropItemList = {12020101,13010301,230401401}}, {m_nId = 108,m_nBoss = 0,m_nScoreList = {840,1120,1400},m_nRewardList = {19000101,241500901,18040201},m_nDropItemList = {14000401,230401201,14000101}}, {m_nId = 109,m_nBoss = 0,m_nScoreList = {1080,1440,1800},m_nRewardList = {12020301,230600101,241800501},m_nDropItemList = {16000401,230901101,230700301}}, {m_nId = 110,m_nBoss = 1,m_nScoreList = {1200,1600,2000},m_nRewardList = {0,0,220200901},m_nDropItemList = {230902101,231101101,231000401}}
};
读取代码如下
#include <stdio.h> extern "C"{ #include "lua.h" #include "lualib.h" #include "lauxlib.h" } #include <iostream> #include <vector> #include "string.h" using namespace std; int main ( int argc, char *argv[] ) { lua_State* L; L=lua_open(); luaopen_base(L); luaopen_table(L); luaopen_string(L); luaopen_math(L); if (luaL_dofile(L, "stage.lua")) { printf("run script failed\n"); } else { int it_idx; int t_idx; lua_getglobal(L,"stage"); t_idx=lua_gettop(L); cout << t_idx << endl; lua_pushnil(L); while(lua_next(L,t_idx)) { it_idx=lua_gettop(L); lua_pushnil(L); //cout << "it_idx = " << it_idx << endl; int m_id = 0; while(lua_next(L,it_idx)) { const char* strkey = lua_tostring(L,-2); if (strcmp(strkey, "m_nId") == 0) { m_id = (int)lua_tonumber(L, -1); cout << "m_id = " <<m_id << " "; } if (strcmp(strkey, "m_nBoss") == 0) { m_id = (int)lua_tonumber(L, -1); cout << "m_nBoss = " << m_id << " "; } if (strcmp(strkey, "m_nScoreList") == 0) { if (lua_istable(L, -1)) { cout << "m_nScoreList = " ; int ll_idx = lua_gettop(L); //cout << "ll_idx = " << ll_idx << endl; lua_pushnil(L); while (lua_next(L, ll_idx)) { cout << (int)lua_tonumber(L, -1) << " "; lua_pop(L, 1); } } } if (strcmp(strkey, "m_nRewardList") == 0) { if (lua_istable(L, -1)) { cout << " m_nRewardList = " ; int ll_idx = lua_gettop(L); // cout << "ll_idx = " << ll_idx << endl; lua_pushnil(L); while (lua_next(L, ll_idx)) { cout << (int)lua_tonumber(L, -1) <<" "; lua_pop(L, 1); } } } if (strcmp(strkey, "m_nDropItemList") == 0) { if (lua_istable(L, -1)) { cout << " m_nDropItemList = "; int ll_idx = lua_gettop(L); // cout << "ll_idx = " << ll_idx << endl; lua_pushnil(L); while (lua_next(L, ll_idx)) { cout << (int)lua_tonumber(L, -1) << " "; lua_pop(L, 1); } } } lua_pop(L,1); } cout << endl; lua_pop(L,1); //break; } } lua_close(L); return 0; }
相关文章推荐
- linux 进阶2--C++读取lua文件中的变量、一维表、二维表
- linux 进阶2--C++读取lua文件中的变量、一维表、二维表
- linux 进阶2--C++读取lua文件中的变量、一维表、二维表
- lua进阶1 ---C++ 中调用lua文件
- Lua与C/C++的交互3:C/C++中读取Lua文件中的表
- .stl文件(CAD三维模型)格式 及 基于C/C++的数据读取
- Lua与C/C++的交互2:C/C++中读取Lua文件
- 关于C++读取Lua配置文件实现案例
- C++嵌入Lua读取配置文件
- lua 进阶3--lua文件中调用C++函数
- C++嵌入Lua读取配置文件
- C++调用Lua读取配置文件的一个简单例子
- 关于C++文件读取
- C++中Txt文件读取和写入
- C++ 读取本地文件,并显示。可以一行一行的显示。
- 关于C++二进制文件读取转换,数据版本升级,增加字段等结构调整工具的思路。
- C,C++中读取文件
- 使用ifstream和getline读取文件内容[c++]
- C++ 读写文件实例总结 (StringToken 为单位读取 以及char为单位读取)
- c++对txt文件的读取与写入