php获取lua元素值,[置顶] lua进阶8-- C++读取lua文件里的三维表

前面lua进阶里面讲到用C++读取2维表,但是最近又有了新的需求,lua文件里面出现了3维表,自己摸索了1下,终究找到了解决的方式,在这里面与大家分享1下

我的lua文件里面的3维表结构以下

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

extern "C"{

#include "lua.h"

#include "lualib.h"

#include "lauxlib.h"

}

#include

#include

#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

");

}

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,⑵);

if (strcmp(strkey, "m_nId") == 0) {

m_id = (int)lua_tonumber(L, ⑴);

cout << "m_id = " <

}

if (strcmp(strkey, "m_nBoss") == 0) {

m_id = (int)lua_tonumber(L, ⑴);

cout << "m_nBoss = " << m_id << " ";

}

if (strcmp(strkey, "m_nScoreList") == 0)

{

if (lua_istable(L, ⑴))

{

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, ⑴) << " ";

lua_pop(L, 1);

}

}

}

if (strcmp(strkey, "m_nRewardList") == 0)

{

if (lua_istable(L, ⑴))

{

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, ⑴) <

lua_pop(L, 1);

}

}

}

if (strcmp(strkey, "m_nDropItemList") == 0)

{

if (lua_istable(L, ⑴))

{

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, ⑴) << " ";

lua_pop(L, 1);

}

}

}

lua_pop(L,1);

}

cout << endl;

lua_pop(L,1);

//break;

}

}

lua_close(L);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值